Блокировка try / Кроме того, что commit_on_success не удалось - PullRequest
0 голосов
/ 12 июля 2011
@transection.commit_on_success
def recordIt(...)
   try:
       ....
       recordable = firstDataInsertionFunction(...)
       if recordable:
          myRec = SecondDataInsertion(.....)

    except:
       ....

Что касается commit_on_success , если моя вторая вставка данных не удалась, django должен автоматически откатиться, поэтому моя первая вставка данных тоже будет откачена ...

Но это не работает, и первые вставленные данные сохраняются в БД, в то время как я не могу увидеть результат второй вставки в мою базу данных ... Является ли попытка / исключение, приводящее к сбою commit_on_success? Потому что, как говорится в документации:

Если функция вернется успешно, Django выполнит всю работу, выполненную внутри функции в этот момент. Если функция вызывает исключение, Django откатит транзакцию.

И try обрабатывает все исключения. Это проблема моего неработающего commit_on_success ?

1 Ответ

4 голосов
/ 12 июля 2011

Прежде всего, никогда не делай except:. Это просто плохо, и слишком много ловит, и скрывает ошибки.

И да, если вы обрабатываете исключение, commit_on_success не может знать, что произошла ошибка. Если вам нужно запустить логику при исключении, повторно ее поднимите (просто raise, без аргументов). Или откатись сам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...