Как сложить вызовы сохранения модели django в случае возникновения ошибки?

#django #orm

#django #orm

Вопрос:

Моему веб-приложению требуется массивная загрузка из файлов csv. Файлы могут содержать ошибки ссылок. Как я могу сохранить «мягко» каждую строку и откатить все сохраненные записи в случае возникновения ошибки?

Я использую команду django.

Ответ №1:

Вы должны захотеть использовать транзакции, чтобы гарантировать атомарность базы данных.

Таким образом, вы можете настроить сохранение вашего блока кода в базе данных только в том случае, если весь блок успешно завершен. Если возникнет какое-либо исключение, транзакция будет откатана.

Смотрите этот пример кода:

 from django.db import transaction

def your_command_func():
    # This code executes in autocommit mode (Django's default).
    do_stuff()

    with transaction.atomic():
        # This block of code executes inside a transaction.
        line = read_from_csv()
        has_error = validate_line(line)

        if has_error:
            raise YourException("something went wrong.")
  

Комментарии:

1. Идеальный ответ, братан. Спасибо.