1
我对SQLAlchemy关于事务的术语感到有点困惑 - 似乎有DB级事务和会话级事务。什么是SQLAlchemy事务vs会话的正确顺序?
我目前的理解: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()
正如你所看到的,目前我创建创建事务后的一个范围的会议,但随后删除会话之前回滚事务。
问题:
- 是交易,我在这里创造一个会话级或数据库级的事务?
- 我是否应该交换这些,以便在范围会话内创建事务?
- 或者完全以其他方式完成并在回滚事务之前删除会话?
感谢您的答案 - 您提到的范围会话给了我更好地理解SQLA会话的线索。我正在使用的示例代码实际上是[加入外部事务的SQLalchemy模式]的示例(http://docs.sqlalchemy.org/en/latest/orm/session_transaction.html#joining-a-session-into -an-外部事务例如-作为换测试套件)。对于这种模式,显式管理会话/事务交互似乎很重要。这个[Flask-SQLAlchemy问题](https://github.com/mitsuhiko/flask-sqlalchemy/issues/243)链接到一个博客文章,更多信息。 – 2015-02-16 22:02:38