0

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

在我的__init__.py我创建一个引擎和一个会话使用:

engine = create_engine('sqlite://')
Session = sessionmaker(bind=engine)
session = Session()

我也有一个entity.py和一个test_entity.py。在我导入的两个文件中session

from __init__ import session

conftest.py我定义了一个函数,它设置数据库并从Base.metadata.

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

我如何解决它?

4

1 回答 1

0

经过反复试验,我发现当我使用磁盘上的数据库时一切正常。

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

记录在案:

Pysqlite 的默认行为是禁止在多个线程中使用单个连接。[...] Pysqlite 确实包含一个名为 check_same_thread 的现在未记录的标志,它将禁用此检查,但请注意,pysqlite 连接仍然不能安全地在多个线程中同时使用。

于 2013-10-01T11:28:05.977 回答