2014-02-25 25 views
26

我想知道,如果我有這樣的事情:Django的嵌套事務 - 「與transaction.atomic()」

def functionA(): 
    with transaction.atomic(): 
     #save something 
     functionB() 

def functionB(): 
    with transaction.atomic(): 
     #save another thing 

有人知道會發生什麼?如果functionB失敗,functionA也會回滾?

謝謝!

+1

請記住,您也可以使用@ transaction.atomic修飾器。 – shadow0359

回答

26

是的,它會的。無論是否嵌套,如果某個原子塊因異常而退出it will roll back

如果代碼塊已成功完成,則會將更改提交到數據庫。如果有異常,則更改將回滾。

另請注意,外部塊中的異常會導致內部塊回滾,並且內部塊中的異常可以被捕獲以防止外部塊回滾。該文檔解決了這些問題。 (有關嵌套事務的更全面的後續問題,請參閱here)。