簡體   English   中英

Django嵌套了Transaction.atomic

[英]Django nested Transaction.atomic

通過閱讀doc: https//docs.djangoproject.com/en/dev/topics/db/transactions/#django.db.transaction.atomic

我知道

atomic blocks can be nested. In this case, when an inner block completes successfully, its effects can still be rolled back if an exception is raised in the outer block at a later point.

但是,我的問題是對於如下代碼結構:

@transaction.atomic
def A():
    ## something
    B()
    C()
    ## something

@transaction.atomic
def B(): 
    ## something

@transaction.atomic
def C():
    ## something

如果B和C都成功了,並且A在他們之后出錯了,那么B和C會回來,對嗎?

如果B成功,但C搞砸了,B會回滾嗎?

關於維護此回滾功能的內存使用情況,上面的那個和后面的一個有什么區別:

@transaction.atomic
def A():
    B()
    C()

def B():
    ## something
def C():
    ## something 

我知道這兩種結構處理不同的情況。 我只是問,假設它們都成功(完全),內存使用水平有什么不同?

提前致謝。

如果B和C都成功了,並且A在他們之后出錯了,那么B和C會回來,對嗎?

是的,整個交易A將被回滾,包括B和C.

如果B成功,但C搞砸了,B會回滾嗎?

同樣,整個事務A將被回滾,包括B和C.

我不能說內存使用量是多少。 這取決於您的數據庫引擎和您正在運行的代碼。 除非你正在使用非常大的數據集,否則我不會擔心它。 如果您正在使用非常大的數據集,那么請進行實驗!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM