在Django文档状态
如果您依靠“自动事务”在select_for_update()和随后的写操作之间提供锁定(这是一个非常脆弱的设计,但仍然可行),则必须将相关代码包装在atomic()中。从Django 1.6.3开始,在自动提交模式下使用select_for_update()执行查询将引发TransactionManagementError。
为什么认为这是脆弱的?我以为这将导致适当的交易性。
Aymeric通过电子邮件澄清说,这种设计很脆弱,因为它依赖于Django 1.5的隐式事务形成的隐式事务边界。
select_for_update(...)
more_code()
save()
该代码在简单的情况下可以工作,但是如果more_code()
导致对数据库的写操作,则事务将关闭,从而产生意外的行为。
强迫用户指定交易边界也会导致代码更清晰。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句