V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
kadycui
V2EX  ›  Python

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

  •  
  •   kadycui · 2020-05-12 18:02:28 +08:00 · 2677 次点击
    这是一个创建于 1452 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 ),祖传项目项目,有点老

    10 条回复    2020-05-16 12:24:41 +08:00
    37Y37
        1
    37Y37  
       2020-05-12 18:29:12 +08:00
    可能数据问题,也可能是有别的脚本改了数据
    encro
        2
    encro  
       2020-05-12 18:34:28 +08:00
    log
    ipwx
        3
    ipwx  
       2020-05-12 18:38:51 +08:00
    可能是别的什么地方读出来了又写回去了。好像 Django 的 .save() 是把所有字段重新存一遍,而不是只更新 dirty fields 。
    cominghome
        4
    cominghome  
       2020-05-12 18:53:18 +08:00
    找 audit 或者 bin log,看你的描述不觉得是 orm 的问题
    wzwwzw
        5
    wzwwzw  
       2020-05-13 01:51:24 +08:00
    save 是把整个对象都重新存一遍,所以检查下 log 是不是有别的地方也更新过。
    chaohuang
        6
    chaohuang  
       2020-05-13 10:38:47 +08:00
    用 update 吧
    kadycui
        7
    kadycui  
    OP
       2020-05-13 14:46:34 +08:00
    @ipwx 现在排查出来有一个地方也有 save()操作
    kadycui
        8
    kadycui  
    OP
       2020-05-13 14:47:17 +08:00
    @wzwwzw 是还有一个地方也存在 save(),现在测试下数据
    codeli
        9
    codeli  
       2020-05-13 20:29:47 +08:00
    查日志
    wobushibaoabao1
        10
    wobushibaoabao1  
       2020-05-16 12:24:41 +08:00
    这个问题实际上是因为,另外还有一个定时任务工作中, 使用到了同样的数据库模型, 同时,也会有 save 操作, 在偶然的时间点里, 这个脚本拿到了缓存的 query_set, 然后进行了 save 动作,导致,另一个定时任务的某个字段修改失败.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2396 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:37 · PVG 15:37 · LAX 00:37 · JFK 03:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.