2013-10-01 55 views
0

我正在努力與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(提取對象時)的錯誤。

我該如何解決?

回答

0

經過一些試驗和錯誤,我發現,當我在磁盤上使用數據庫時,所有工作正常。

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

這是documented

Pysqlite的默認行爲是禁止在多個線程的單一 連接的使用。 [...] Pysqlite包括一個 現在未記錄的標誌,稱爲check_same_thread,它將禁用 此檢查,但請注意,pysqlite連接在多線程中併發使用仍然不安全 。

相關問題