try / except块是否导致commit_on_success失败

时间:2011-07-12 15:45:16

标签: python django exception-handling

@transection.commit_on_success
def recordIt(...)
   try:
       ....
       recordable = firstDataInsertionFunction(...)
       if recordable:
          myRec = SecondDataInsertion(.....)

    except:
       ....

对于 commit_on_success ,如果我的第二次数据插入失败,django必须自动回滚,所以我的第一次数据插入也将被回滚...

但这不起作用,并且第一次插入的数据被保存到db,而我无法在我的数据库中看到第二次插入的结果...是try / except会导致commit_on_success失败吗?因为文档说:

  

如果函数成功返回,那么Django将在该点提交函数内完成的所有工作。但是,如果函数引发异常,Django将回滚事务。

尝试处理所有异常。问题是我的工作 commit_on_success

1 个答案:

答案 0 :(得分:4)

首先,不要做except:。它很糟糕,捕获太多,并隐藏了错误。

是的,如果您处理异常,那么commit_on_success不可能知道存在错误。如果你需要在异常上运行逻辑,那么之后重新加载它(只有raise,没有参数)。或者自己回滚。