SQLAlchemy,线程和表不是这样的表错误

时间:2011-12-07 16:36:57

标签: python multithreading sqlalchemy

我有一个包装对SQLAlchemy的所有访问的对象,我们称之为Wrapper。我使用sqlalchemy.orm.scoped_session,以便任何会话都是本课程所在线程的本地会话。现在,我有一个Master线程,它创建了一个Wrapper实例。 Mater创建了一些Slave线程,并传递了对Wrapper的引用。

当任何Slave调用从Wrapper类中调用的任何SQLAlchemy时,会引发以下错误:

DB Exception raied: DB Error: (OperationalError) no such table:[...]

我做错了什么?

我应该为每个Slave创建Wrapper的新实例吗?

编辑:我在内存数据库中使用SQLite(主要用于测试),如果这有任何区别的话。获胜者是:内存中的sqlite不能在线程之间共享所以我可以将引擎传递给Wrapper,只要它不是内存中的引擎。将True设置为详细选项是一个非常好的调试工具。

1 个答案:

答案 0 :(得分:1)

是的,要么在每个线程中创建一个Wrapper,要么让Wrapper维护一个会话池。