Следует ли @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()
, это заставит транзакцию откатиться.
Пример использования атомов в документации: 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()