django 使用 orm 修改某个数据库字段值时, save()后大约过了三分钟,这个字段的值又回到了修改之前的值. 不是每次都必现的

2020-05-12 18:02:28 +08:00
 kadycui

save()之后代码没有报错,数据库字段已经更改成功,之后 3-5 分钟字段又恢复到原来的状态. 这段代码是每天都执行的自动脚本的一小部分 这个字段每天都会被更改

                if ser_list:
                    for s in ser_list:
                        create_time = s.create_time
                        dt = now - create_time
                        if dt.days == 0 and dt.seconds / 60 > 0 and dt.seconds / 60 < 3:
                            s.status = 4
                            s.commend = 1
                            s.last_time = datetime.datetime.now()
                            s.save()

业务环境(django 1.6+python2.6+mysql5.6 ),祖传项目项目,有点老

2723 次点击
所在节点    Python
10 条回复
37Y37
2020-05-12 18:29:12 +08:00
可能数据问题,也可能是有别的脚本改了数据
encro
2020-05-12 18:34:28 +08:00
log
ipwx
2020-05-12 18:38:51 +08:00
可能是别的什么地方读出来了又写回去了。好像 Django 的 .save() 是把所有字段重新存一遍,而不是只更新 dirty fields 。
cominghome
2020-05-12 18:53:18 +08:00
找 audit 或者 bin log,看你的描述不觉得是 orm 的问题
wzwwzw
2020-05-13 01:51:24 +08:00
save 是把整个对象都重新存一遍,所以检查下 log 是不是有别的地方也更新过。
chaohuang
2020-05-13 10:38:47 +08:00
用 update 吧
kadycui
2020-05-13 14:46:34 +08:00
@ipwx 现在排查出来有一个地方也有 save()操作
kadycui
2020-05-13 14:47:17 +08:00
@wzwwzw 是还有一个地方也存在 save(),现在测试下数据
codeli
2020-05-13 20:29:47 +08:00
查日志
wobushibaoabao1
2020-05-16 12:24:41 +08:00
这个问题实际上是因为,另外还有一个定时任务工作中, 使用到了同样的数据库模型, 同时,也会有 save 操作, 在偶然的时间点里, 这个脚本拿到了缓存的 query_set, 然后进行了 save 动作,导致,另一个定时任务的某个字段修改失败.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/671010

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX