我想证实我的理论。我正在阅读文档,但可能我没有正确阅读
假设我们有
@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()