Является ли @transaction.atomic дешевым?

Это в основном любопытство, но является ли штраф DB для обертывания всего представления с помощью @transaction.atomic незначительным?

Я думаю о представлениях, где GET формы или ее повторное отображение после сбоя валидации включает обработку наборов запросов. (ModelChoiceFields, например, или получение объекта, который отображается в шаблоне.)

Мне кажется гораздо более естественным использовать with transaction.atomic() вокруг блока кода, который фактически изменяет кучу связанных объектов БД только после проверки вводимых пользователем данных.

Я что-то упустил?

Из исходного кода:

def atomic(using=None, savepoint=True, durable=False):
    # Bare decorator: @atomic -- although the first argument is called
    # `using`, it's actually the function being decorated.
    if callable(using):
        return Atomic(DEFAULT_DB_ALIAS, savepoint, durable)(using)
    # Decorator: @atomic(...) or context manager: with atomic(...): ...
    else:
        return Atomic(using, savepoint, durable)

Это одно и то же. В обоих случаях функция возвращает объект Atomic, который обрабатывает, должна ли транзакция зафиксироваться или нет.

Вернуться на верх