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
334862132
V2EX  ›  Python

Python 写的 mysql 升级倒着运行的问题

  •  
  •   334862132 · 2019-02-15 17:59:04 +08:00 · 1729 次点击
    这是一个创建于 2108 天前的主题,其中的信息可能已经有所发展或是发生改变。
    升级用的 python 里面的 mysql 原生写的
    数据库有 3 个状态 0 1 2 ,原状态为 0
    第一个 sql 升级状态把 0 升级为 1(处理中)
    之后写了一个事物
    处理成功后把数据库状态升级为 2 失败则升级数据库为 0 (都同时升级其他字段)

    运行有的时候网络波动 会出现处理完成后状态为 1 并且事物所处理的字段也填充上了,这是什么鬼
    3 条回复    2019-02-15 18:14:48 +08:00
    mayorbryant
        1
    mayorbryant  
       2019-02-15 18:08:57 +08:00   ❤️ 1
    感觉楼主描述的有点绕啊,根据我的理解,你这个现象很正常啊,说明回写为 2 的操作并没有执行成功啊,
    在你写的事务中应该有这样的伪代码

    start transaction
    done something
    if done:
    回写 2
    transaction commit
    else:
    回写 0
    transaction rollback
    xpresslink
        2
    xpresslink  
       2019-02-15 18:09:53 +08:00   ❤️ 1
    处理成功后把数据库状态升级为 2 失败则升级数据库为 0 (都同时升级其他字段)

    不太理解你说的,用数据库事务去处理如果失败则回滚到前一个状态,应该是 1 啊,你失败则升级为 0 是什么鬼。
    ksedz
        3
    ksedz  
       2019-02-15 18:14:48 +08:00   ❤️ 1
    可能有多线程,或者重复数据导致了覆盖
    解决办法是第一个 sql 加个条件,只处理状态为 0 的数据
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2413 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 15:58 · PVG 23:58 · LAX 07:58 · JFK 10:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.