Django управление транзакциями - PullRequest
10 голосов
/ 20 сентября 2009

У меня есть проект django, в котором значения базы данных нужно обновлять довольно часто самостоятельно. Существует cronjob, который выполняется для обновления этих значений в базе данных, но некоторые операции требуют атомарных транзакций. Кто-нибудь знает, как сделать метод модели полной транзакцией в django, не просматривая представления?

В идеале я хотел бы иметь возможность начать транзакцию в начале метода и зафиксировать его в конце, а затем просто иметь возможность вызывать этот метод из любого места (представление или cronjob) с гарантией что метод атомарный.

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

Спасибо.

1 Ответ

15 голосов
/ 20 сентября 2009

Вы смотрели на документацию по транзакциям Джанго ? Особенно декоратор @transaction.commit_on_success ( исходный код ). Он фиксирует транзакцию, если декорированная функция возвращается без вызова исключения. Если возникает исключение, выполняется откат.

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