【问题标题】:'Object already attached to session' and 'no such table'“对象已附加到会话”和“没有这样的表”
【发布时间】:2013-10-01 10:57:25
【问题描述】:

我正在努力使用 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(获取对象时)之类的错误.

我该如何解决?

【问题讨论】:

    标签: python sqlalchemy pytest


    【解决方案1】:

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

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

    documented:

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

    【讨论】:

      猜你喜欢
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      • 2021-11-27
      • 2018-10-04
      • 2016-03-01
      相关资源
      最近更新 更多