@transaction.atomic是否跟随函数调用



我想证实我的理论。我正在阅读文档,但可能我没有正确阅读

假设我们有

@transaction.atomic
def create(...):
few queries...
func_a()
return
def func_a():
also running few queries... 

如果func_a内部的查询失败,事务原子会回滚吗?我试图弄清楚在这个场景中,它是封装了整个执行流,还是仅仅封装了create函数。

对不起,如果我的问题有点傻

如果在func_a内部查询失败,事务原子会回滚吗?

是的,Django将包装您执行的所有查询,甚至在函数调用中也是如此。在您的示例中,如果func_a()create()引发异常,它将使事务回滚。

docs原子用法示例:https://docs.djangoproject.com/en/4.1/topics/db/transactions/#django.db.transaction.atomic

from django.db import transaction
@transaction.atomic
def viewfunc(request):
# The function bellow executes inside a transaction.
do_stuff()
# or
def viewfunc(request):
# This code executes in autocommit mode (Django's default).
do_stuff()
with transaction.atomic():
# This code executes inside a transaction.
do_more_stuff()

最新更新