我剛碰到我的測試套件出現問題。 我使用的是安裝有nosetests,SQLAlchemy的,瓶和工廠男孩如何正確使用SQLAlchemy會話(Lazy Loaded)的Factory Boy?
我有以下代碼:以下
def _create_fixtures(self):
self.user = UserFactory()
pprint(db.query(User).all())
db.add(self.user)
pprint(db.query(User).all())
女巫回報:
[<User #1>, <User #2>]
[<User #1>, <User #2>]
我UserFactory看起來是這樣的:
class UserFactory(Factory):
FACTORY_FOR = User
FACTORY_SESSION = db
email = Sequence(lambda n: 'user{0}@wohnortfinder.com'.format(n))
password = "password"
username = Sequence(lambda n: 'user{0}'.format(n))
(是的,我使用正常的工廠,而不是他SQLAlche我的工廠,因此也沒有工作)
爲什麼不是我的工廠對象存儲到分貝?它不會引發錯誤,它不會保存。 我的意思是,即使當前事務還沒有提交,稍後查詢應查詢實際事務,不應該嗎?
奇怪的是,當我手動提交會話時,會產生錯誤。
InvalidRequestError: No transaction is begun.
儘管我在創建會話對象時開始了一個事務。
def init_engine(uri, **kwargs):
global engine
engine = create_engine(uri, **kwargs)
Base.metadata.create_all(engine)
db.begin()
return engine
engine = None
db = scoped_session(lambda: create_session(bind=engine))
爲什麼這是行不通的任何想法?
感謝您的想法
''set_up_a_db_session_somehow()'這是一個甜美的函數名稱:) – Nick