select_for_update是在第一个save()还是在视图结尾处释放锁定?

时间:2012-08-29 07:56:04

标签: django-orm

我有类似的东西:

newsletter = Newsletter.select_for_update().latest()
newsletter.started_sending = timezone.now()
newsletter.save()

newsletter.send()

然后它遇到了我发送重复的竞争条件,大概是因为send()被两个cron作业击中了。这导致我认为锁是在第一次保存时释放的,我认为它在视图结束之前不会释放。

它是在第一次保存时发布的,对吧?

1 个答案:

答案 0 :(得分:10)

来自https://docs.djangoproject.com/en/dev/topics/db/transactions/#topics-db-transactions-requirements

  

Django的默认交易行为

     

Django的默认行为是使用open事务运行,当调用任何内置的数据更改模型函数时,它会自动提交。例如,如果调用model.save()或model.delete(),则会立即提交更改。