テストスイートで問題が発生しました。私は、nosetests、SQLAlchemy、Flask、および 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))
(はい、SQLAlchemy ファクトリではなく、通常のファクトリを使用しています。これも機能しなかったためです)
Factory オブジェクトが db に保存されないのはなぜですか? エラーは発生しませんが、保存されません。つまり、現在のトランザクションがまだコミットされていない場合でも、クエリは後で実際のトランザクションをクエリする必要がありますね。
奇妙なことに、セッションを手動でコミットすると、エラーが発生します。
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))
なぜこれが機能しないのですか?
ご感想ありがとうございます