具体来说,在提交或回滚后是否需要调用begin
?我看到有人建议新会话始终进入 begin
状态;但我想知道会议开始时发生的自动提交事务。
我必须何时发出begin
?同一会话中的多个begin
行为与MySQL终端中的行为相同吗?
我有案例(看评论):
- 1在循环中执行事务的方法:
for ...: #EACH ONE DESERVES TO HAVE OWN TRANSACTION
session.begin()
for ....:
session.execute("insert into...")
session.commit()
- 2在同一会话中调用另一个函数的函数:
def f1(): #can be done standalone
session = Session()
session.begin()
...do stuff
session.commit()
def f2():
session = Session()
session.begin()
a = session.execute("select...")
if stuff_not_fine():
session.rollback() #KILL OF CURRENT TRANSACTION
f1()
session.begin() #CONTINUE WHERE IT LEFT
a = session.execute("select...")
...do rest of stuff
答案 0 :(得分:0)
SQL连接也是一个上下文管理器。所以你可以做到
session = Session()
with session as cursor:
# do stuff
为了进行漫游,您可能会引入一个异常,如果引发该异常,则会导致上下文管理器回滚事务。但是,您应该记住捕获异常。