Карточка Middle Django ORM и N+1 спрашивают часто обновлено

transaction.atomic

Вопрос

Что делает transaction.atomic и что происходит при вложенных atomic?

Попробуйте сами

Ответьте про себя или вслух, потом откройте ответ и сверьтесь.

Показать ответ и разбор

Коротко

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

Ответ

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

Разбор

Нельзя ловить исключение БД внутри atomic и продолжать запросы в том же блоке: транзакция в PostgreSQL в состоянии ошибки. Ловить нужно снаружи вложенного atomic.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.