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 に答える