Django事务管理

时间:2009-09-20 12:56:37

标签: django transactions

我有一个django项目,其中数据库值需要经常自己更新。有一个cronjob运行来更新数据库中的这些值,但有些操作需要原子事务。有没有人知道如何在不通过视图的情况下使模型方法成为django中的完整事务?

理想情况下,我希望能够在方法的开头启动事务并在最后提交它,然后只需能够从任何地方(视图或cronjob)调用该方法该方法是原子的。

如果您知道如何执行此操作,我还需要知道,如果提交失败(由于同时写入等),事务会自动重新尝试,或者我是否必须手动捕获失败异常并重新调用该方法。

谢谢。

1 个答案:

答案 0 :(得分:15)

你看过Django的transaction docs了吗?特别是@transaction.commit_on_successsource code)装饰者。如果装饰函数返回而不引发异常,则它将提交事务。如果发生异常,则会进行回滚。