在我的网络应用中,不同的用户可以同时发出修改同一对象上不同字段的请求。
让我们说我们的widget对象有字段a和b,它们都是0。
用户1的请求会触发此行:
widget.a = 1
用户2的请求会触发此行:
widget.b = 1
如果用户2的请求最后保存到数据库,则该对象最终会显示a=0
和b=1
,而我想要a=1
和b=1
有没有办法避免这种情况?我知道select_for_update,但是(1)它不能在我的平台用户使用的SQLite上进行简单的本地开发,以及(2)因为它会阻塞直到它可以锁定它的行听起来它会不必要地损害性能,特别是当一个请求实际上并没有最终修改对象时。
我想到的是,在save()
上,只有自查询对象以来已更改的字段才会写入数据库,就像将delta / diff应用于对象一样。
有什么建议吗?