我对SQLAlchemy关于事务的术语感到有些困惑 - 似乎有DB级事务和会话级事务。
我目前的理解:Sessions(session-level transactions(db-level transactions()))
我将事务与作用域会话一起用作测试夹具的一部分。我启动一个事务,创建数据并查看测试是否通过,然后在下一次测试之前回滚事务。
这是我的代码:
connection = db.engine.connect()
transaction = connection.begin()
options = dict(bind=connection, binds={})
db.session = db.create_scoped_session(options=options)
yield db.session
transaction.rollback()
connection.close()
db.session.remove()
如您所见,目前我在创建事务后创建了一个范围会话,但在删除会话之前回滚了事务。
问题:
答案 0 :(得分:0)
您基本上可以将会话视为超级事务,在会话中您可以打开和关闭多个事务(虽然一次只能一个)来读取和写入数据。
create_scoped_session
实际上是一个flask-sqlalchemy扩展,但在后台它使用标准的SQLAlchemy会话创建代码。所以你在这里使用它们。让burn-sqlalchemy完全为你处理,这是一个提交的例子:
your_object = YourObject(...)
db.session.add(your_object)
db.session.commit()
回滚一个例子:
your_object = YourObject(...)
db.session.add(your_object)
db.session.rollback()
这一切都取决于你如何使用它,你的代码建议这是在flask
会话中,这将是有效的。外面你需要一个不同的解决方案