2013-10-01 4 views
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 (при извлечении объекта).

Как исправить это?

ответ

0

После некоторых проб и ошибок я обнаружил, что все работает нормально, когда я использую базу данных на диске.

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

Это documented:

поведение Pysqlite по умолчанию запретить использование одного соединения в более чем одной нити. [...] Pysqlite включает в себя флаг , известный как check_same_thread, который отключит эту проверку, однако обратите внимание, что соединения pysqlite по-прежнему небезопасны для одновременного использования в нескольких потоках.

Смежные вопросы