我正在努力使用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
(当获取一个对象)。
我该如何解决?
答案 0 :(得分:0)
经过一些试验和错误后,我发现当我在磁盘上使用数据库时,一切正常。
engine = create_engine('sqlite:////path/to/db')
Pysqlite的默认行为是禁止使用单个 多个线程中的连接。 [...] Pysqlite确实包括一个 now-undocumented标志,称为check_same_thread,将禁用 但是请注意,pysqlite连接仍然不安全 在多个线程中同时使用。