【发布时间】:2011-01-21 04:07:33
【问题描述】:
我想知道在另一个内部进行交易是否安全且受鼓励?
我有一个方法:
def foo():
session.begin
try:
stuffs
except Exception, e:
session.rollback()
raise e
session.commit()
以及在事务中调用第一个方法:
def bar():
stuffs
try:
foo() #<<<< there it is :)
stuffs
except Exception, e:
session.rollback()
raise e
session.commit()
如果我在 foo 方法上遇到异常,所有操作都将是 回滚?其他一切都会正常工作吗? 谢谢!!
【问题讨论】:
-
嵌套事务(例如 Oracle 的 AUTONOMOUS_TRANSACTION)有资格作为反模式,除了以下两种情况:审计(因此即使语句回滚,尝试也会被审计)和错误日志记录(捕获何时/何地存在故障)。所有其他情况都应使用保存点。哎呀,事务范围不属于在任何函数或过程中处理;提交或回滚应该是最终调用者的责任。
标签: python database postgresql sqlalchemy