web-dev-qa-db-ja.com

Djangoネストされたトランザクション-「with transaction.atomic()」

私がこのようなものを持っているかどうかを知りたいです:

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

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

誰かが何が起こるか知っていますか? functionBが失敗した場合、functionAもロールバックしますか?

ありがとうございました!

38
Lara

はい、そうです。ネストに関係なく、アトミックブロックが例外によって終了した場合 ロールバックされます

コードのブロックが正常に完了すると、変更がデータベースにコミットされます。例外がある場合、変更はロールバックされます。

また、外側のブロックで例外が発生すると、内側のブロックがロールバックされ、内側のブロックで例外がキャッチされて、外側のブロックがロールバックされないようにすることもできます。ドキュメントはこれらの問題に対処します。 (または、ネストされたトランザクションに関するより包括的なフォローアップ質問については ここ を参照してください)。