Django 文档指出:
如果您依靠“自动事务”在 select_for_update() 和后续写入操作之间提供锁定——这是一个极其脆弱的设计,但仍然可能——你必须将相关代码包装在 atomic() 中。
这不再起作用的原因是自动提交是在数据库层而不是应用程序层完成的吗?以前,事务将保持打开状态,直到调用数据更改函数:
Django 的默认行为是使用打开的事务运行,当调用任何内置的数据更改模型函数时,它会自动提交该事务
从 Django 1.6 开始,在数据库层使用 autcommit,aselect_for_update
后跟例如 awrite
实际上会在两个事务中运行?如果是这种情况,那么它并没有select_for_update
变得无用,因为它的重点是锁定行直到调用数据更改函数?