例如,以下两个之间是否存在差异?
session = Session() # Session is a session maker
try:
# do some work
session.commit()
except:
session.rollback()
finally:
session.close()
和
session = Session()
try:
# do some work
session.commit()
finally:
session.close()
后者是我以前做的,因为我假设在提交之前关闭会话(如果出现错误)与回滚具有相同的效果。但我看到了第一个表格here。
答案 0 :(得分:4)
Closing会话将隐式回滚当前的事务状态:
close()
方法会发布expunge_all()
和releases任何事务/连接资源。当连接返回到连接池时,也会回滚事务状态。
但我认为第一种形式仍然更好,因为explicit is better than implicit。 SQLAlchemy的作者也是seems to reflect this sentiment。