'对象已经附加到会话'和'没有这样的表'

时间:2013-10-01 10:57:26

标签: python sqlalchemy pytest

我正在努力使用SQLAlchemy和py.test。

在我的__init__.py中,我使用:

创建引擎和会话
engine = create_engine('sqlite://')
Session = sessionmaker(bind=engine)
session = Session()

我还有entity.pytest_entity.py。在这两个文件中,我导入了session

from __init__ import session

conftest.py我定义了一个设置数据库并从Base.metadata创建模式的函数。

关键是我的测试模块中的所有事务都通过了,但我测试的类中的所有事务都失败了,如Object already bound to session(添加和提交对象时)或OperationalError: no such table(当获取一个对象)。

我该如何解决?

1 个答案:

答案 0 :(得分:0)

经过一些试验和错误后,我发现当我在磁盘上使用数据库时,一切正常。

engine = create_engine('sqlite:////path/to/db')

documented

  

Pysqlite的默认行为是禁止使用单个   多个线程中的连接。 [...] Pysqlite确实包括一个   now-undocumented标志,称为check_same_thread,将禁用   但是请注意,pysqlite连接仍然不安全   在多个线程中同时使用。