Python SQLAlchemy事务与会话的正确顺序是什么?
SQLAlchemy关于事务的术语让我有点困惑——似乎有DB级事务和会话级事务 我目前的理解:Python SQLAlchemy事务与会话的正确顺序是什么?,python,sqlalchemy,Python,Sqlalchemy,SQLAlchemy关于事务的术语让我有点困惑——似乎有DB级事务和会话级事务 我目前的理解:会话(会话级事务(db-leveltransactions()) 我将事务与作用域会话一起用作测试夹具的一部分。我启动一个事务,创建数据并查看测试是否通过,然后在下一个测试之前回滚该事务 这是我的密码: connection = db.engine.connect() transaction = connection.begin() options = dict(bind=connection, bin
会话(会话级事务(db-leveltransactions())
我将事务与作用域会话一起用作测试夹具的一部分。我启动一个事务,创建数据并查看测试是否通过,然后在下一个测试之前回滚该事务
这是我的密码:
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()
如您所见,目前我在创建事务之后创建了一个作用域会话,但在删除该会话之前回滚了该事务
问题:
您基本上可以将会话视为超级事务,在一个会话中,您可以打开和关闭多个事务(但一次只能打开和关闭一个事务)以读取和写入数据
create\u scoped\u session
实际上是一个flask sqlalchemy扩展,但在后台它使用标准的sqlalchemy session创建代码。所以你在这里都用your_object = YourObject(...)
db.session.add(your_object)
db.session.commit()
还有一个回滚示例:
your_object = YourObject(...)
db.session.add(your_object)
db.session.rollback()
不过,这完全取决于您如何使用它,您的代码表明这是在flask
会话中进行的。在外面,你需要一个不同的解决方案