Django事务管理

So8*_*res 10 django transactions

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

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

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

谢谢.

Ben*_*end 15

您是否看过Django的交易文档?特别是@ transaction.commit_on_success(源代码)装饰器.如果装饰函数返回而不引发异常,则它将提交事务.如果发生异常,则执行回滚.

  • 是的,这是适当的使用方法.我认为OP是关注的,因为文档只引用了这些与视图,而不是模型方法,但在查看源代码时,那里没有什么东西在视图之外不起作用. (5认同)
  • 文档的该页面上实际上有一条说明"尽管下面的示例使用视图函数作为示例,但这些装饰器也可以应用于非视图函数." (5认同)
  • 注意:源代码已更改,并且由于代码已更改,因此不再指向正确的位置.另外,看起来django在1.5中重新设计了交易内容.`transaction.commit_on_success`现在(我认为)`transaction.atomic` (2认同)