猿问

在 SQLAlchemy 中,如何在使用乐观锁更新后获取受影响的行?

很抱歉问这个问题,但在搜索这个问题后我找不到任何有用的答案。


我知道在 SQLAlchemy 的会话中,update()将无法工作,甚至可能无法与数据库通信,直到您使用session.commit.


这是我的代码,我认为我使用的技能称为optimistic lock:


with Session() as session:

    # get one record

    object = session.query(Table).where(key=param).limit(1)


    content = "here is the calculated value of my business"


    # update the record by the id of the gotten record 

    # if 2 thread get the same record and run into this update statement, I think only can success

    # because it is ensured by the MySQL MVCC

    Table.update(Table).set(Table.content = content).where(id = object.id)

    sessoin.commit()

但是我在这里有一个问题,如果我想在in the thread which got the lock之后做点什么session.commit()?


比如我期望的代码是这样的:


affected_rows = sessoin.commit()

if affected_rows:

    do_something_after_get_lock_success()

有人可以帮忙吗?非常感谢!^_^


芜湖不芜
浏览 349回答 1
1回答

开心每一天1111

根据文档,ResultProxy有一个属性rowcount。您可以从中获取受影响的行。但请注意:此属性返回匹配的行数,这不一定与实际修改的行数相同 - 例如,如果给定的 SET 值与那些已经在行中的人。这样的行将被匹配但不会被修改。在具有两种样式的后端(例如 MySQL)上,默认情况下配置 rowcount 以在所有情况下返回匹配计数。请参阅此处了解有关此问题的伟大迈克·拜耳 (Mike Bayer) 解释。
随时随地看视频慕课网APP

相关分类

Python
我要回答