Что произойдёт при вызове вложенной транзакции (atomic внутри atomic) в Django?

Внешний atomic открывает транзакцию, а вложенный обычно создаёт savepoint. Успешный выход из внутреннего блока не фиксирует изменения независимо: итоговый commit остаётся у внешнего.

Короткий ответ

Что ответить на собеседовании

Внешний atomic открывает транзакцию, а вложенный обычно создаёт savepoint. Успешный выход из внутреннего блока не фиксирует изменения независимо: итоговый commit остаётся у внешнего.

Подробный разбор

Ответ с пояснениями

Условие

Что произойдёт при вызове вложенной транзакции (atomic внутри atomic) в Django?

Ответ

Внешний atomic открывает транзакцию, а вложенный обычно создаёт savepoint. Успешный выход из внутреннего блока не фиксирует изменения независимо: итоговый commit остаётся у внешнего.

Ошибка во вложенном блоке приводит к откату до savepoint; если исключение выходит наружу, внешняя транзакция тоже откатывается. Обрабатывайте DB-исключения вокруг atomic-блока, не маскируя broken transaction внутри него. Параметр savepoint=False меняет эту схему; on_commit выполняется после успешной фиксации внешней транзакции, а не при выходе из внутренней.

Источник: docs.djangoproject.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее