Управление транзакциями Django
У меня есть проект django, в котором значения базы данных необходимо регулярно обновлять самостоятельно. Там работает cronjob для обновления этих значений в базе данных, но для некоторых операций требуются атомные транзакции. Кто-нибудь знает, как сделать модельный метод полной транзакцией в django, не просматривая представления?
В идеале я хотел бы начать транзакцию в начале метода и зафиксировать его в конце, а затем просто иметь возможность вызвать этот метод из любого места (вид или cronjob) с гарантией что метод является атомарным.
Если вы знаете, как это сделать, мне также нужно знать, должен ли коммит сбой (из-за одновременной записи или чего-то еще), транзакция автоматически повторена или если мне придется вручную поймать исключение сбоя и повторный вызов метода.
Спасибо.
Ответы
Ответ 1
Вы посмотрели Django документы о транзакциях? Особенно @transaction.commit_on_success (исходный код) decorator. Он совершает транзакцию, если украшенная функция возвращается без повышения исключения. Если возникает исключение, выполняется откат.