Django DB替代select_for_update

时间:2014-06-15 08:44:58

标签: django sqlite postgresql django-models

在我的网络应用中,不同的用户可以同时发出修改同一对象上不同字段的请求。

让我们说我们的widget对象有字段a和b,它们都是0。

用户1的请求会触发此行:

widget.a = 1

用户2的请求会触发此行:

widget.b = 1

如果用户2的请求最后保存到数据库,则该对象最终会显示a=0b=1,而我想要a=1b=1

有没有办法避免这种情况?我知道select_for_update,但是(1)它不能在我的平台用户使用的SQLite上进行简单的本地开发,以及(2)因为它会阻塞直到它可以锁定它的行听起来它会不必要地损害性能,特别是当一个请求实际上并没有最终修改对象时。

我想到的是,在save()上,只有自查询对象以来已更改的字段才会写入数据库,就像将delta / diff应用于对象一样。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我找到了自己问题的答案。有一个名为Django Save the Change的包提供了一个模型mixin,它只保存更改的字段。