为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

芜湖不芜 2021-09-25 22:05:47
很抱歉问这个问题,但在搜索这个问题后我找不到任何有用的答案。我知道在 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()有人可以帮忙吗?非常感谢!^_^
查看完整描述

1 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

根据文档,ResultProxy有一个属性rowcount。您可以从中获取受影响的行。

但请注意:

此属性返回匹配的行数,这不一定与实际修改的行数相同 - 例如,如果给定的 SET 值与那些已经在行中的人。这样的行将被匹配但不会被修改。在具有两种样式的后端(例如 MySQL)上,默认情况下配置 rowcount 以在所有情况下返回匹配计数。

请参阅此处了解有关此问题的伟大迈克·拜耳 (Mike Bayer) 解释。


查看完整回答
反对 回复 2021-09-25
  • 1 回答
  • 0 关注
  • 348 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信