max*_*man 5 python sqlalchemy flask-sqlalchemy
我通过 Flask-SQLAlchemy 使用更高级别的 SQLAlchemy ORM。我希望能够创建多个表,然后在单个事务中提交它们。然而,一个表与所有其他表相关,我不确定如何在它实际存在之前增加它的 ID。(请注意,它的主键是一个自动递增的值,直到我们实际执行 SQL 时才存在。)
例如,假设我们有TableA和TableB。TableB有一个名为 的专栏table_a_id。IDTableA由数据库管理;它会自动递增,并且在我们创建一行TableA.
我希望能够创建TableA并TableB同时在出现问题时回滚事务。
在一个魔法成为可能的完美世界中,我的代码将如下所示:
try:
a = TableA()
b = TableB(table_a_id=a.id) # a.id is None, since nothing has happened yet.
db.session.commit()
except Exception:
db.session.rollback()
Run Code Online (Sandbox Code Playgroud)
a.id是否可以通过子交易在交易中填写 的值?
session.flush()只需在创建对象后使用a,它会在当前事务中发出所有待处理的 SQL,并将填充自动生成的 ID。稍后您可以commit()或rollback()根据需要。