Встречается на собеседованиях • сегодня

Как в Django ORM использовать транзакции

В Django ORM транзакции используются для обеспечения атомарности операций с БД. Основные способы:

  1. Декоратор @transaction.atomic:
python
from django.db import transaction

@transaction.atomic
def update_data():
    # Весь код внутри функции выполняется в одной транзакции
    Model.objects.update(field='value')
    if error_condition:
        raise Exception()  # автоматический откат
  1. Контекстный менеджер:
python
with transaction.atomic():
    # Операции внутри блока атомарны
    obj = Model.objects.select_for_update().get(id=1)
    obj.field = 'new_value'
    obj.save()
  1. Вложенные транзакции (savepoints):
python
with transaction.atomic():
    try:
        with transaction.atomic():
            # Внутренняя транзакция
            raise DatabaseError
    except DatabaseError:
        pass  # Откатывается только внутренний блок

Ключевые моменты:

  • По умолчанию Django использует autocommit для каждого запроса
  • atomic() создает точку сохранения (savepoint) для вложенных транзакций
  • Для пессимистичных блокировок используйте select_for_update()
  • Ошибки вызывают автоматический откат транзакции
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы