多线程范围的会话中的SQLAlchemy

2024-09-29 19:27:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在多线程环境中使用SQLAlchemy,但是遇到了一些奇怪的错误。情况如下:

线程1启动所有SQLAlchemy对象(引擎、模型、作用域的会话等)

然后,线程2尝试使用限定作用域的\u session对象来查询数据库。不幸的是,从线程2抛出错误。在

我创建了一个简单的测试用例来说明我要实现的目标:

import sqlalchemy
from sqlalchemy import Column, Integer, String, Boolean, desc, asc, func

from sqlalchemy import create_engine
sqlEngine = create_engine('sqlite:///:memory:',echo=False)
from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

class SimpleTable(Base):
    __tablename__ = 'SimpleTable'

    orderID = Column(Integer, primary_key=True)
    field = Column(Integer)

    def __repr__(self):
    return "<Simple Table: %s>" % self.field

session_factory = sessionmaker(bind=sqlEngine)
Session = scoped_session(session_factory)
Base.metadata.create_all(sqlEngine)

for i in xrange(10):
    var = SimpleTable(field=10)
    Session.add(var)

Session.query(SimpleTable).all()
Session.commit()

from threading import Thread

class TestThread(Thread):

    def run(self):
    print "Running test thread..."
    try:
        print 'Grabbing data from thread:'+str(Session.query(SimpleTable).all())
    except BaseException as e:
        print e
    print "Done running test thread..."

TestThread().start()

print 'Grabbing data outside thread:'+str(Session.query(SimpleTable).all())

以下是错误的输出:

^{pr2}$

由于某种原因,该表不存在。我已经阅读并重读了文档以及互联网上的多个帖子,似乎存在针对上述情况的限定会话。有人能开导我吗?在


Tags: fromimportsqlalchemysession错误createcolumninteger
1条回答
网友
1楼 · 发布于 2024-09-29 19:27:59

我也遇到过同样的情况。我怀疑“内存中”数据库不支持作用域的\u会话。当我切换到普通的基于文件的数据库时,问题就消失了。在

相关问题 更多 >

    热门问题