gpt4 book ai didi

python - Flask-SQLAlchemy with_for_update() 行锁

转载 作者:可可西里 更新时间:2023-11-01 07:24:49 25 4
gpt4 key购买 nike

我有一个名为“User”的模型,“User”有“Money”。
存在多个 session 可以同时读取模型“User”并更新“money”的场景。

session 2 应在 session 1 成功更新后读取“money”值。
我试图在更新时锁定“用户”行。
这是我的代码。

user = User.query.with_for_update().filter_by(id=userid).first()
print('000000')
before_money = user.money
print('111111')
time.sleep(1)
user.money -= 0.1
print('User:' + str(user.id) + '***' + str(before_money) + '-' + str(0.1) + ' = ' + str(user.money))
time.sleep(1)
db.session.commit()
print('22222')

我开了两个session同时运行这段代码,输出

000000
111111
User:1***125.3-0.1 = 125.2
000000
111111
22222
User:1***125.3-0.1 = 125.2
22222

session 2 未读取更新后的值。

我很想知道问题出在哪里。

最佳答案

折腾了一整天,找到问题了。

user = User.query.with_for_update().filter_by(id=userid).first()

应该是

result = db.session.query(User.money).with_for_update().filter_by(id=userid).first()
money = result[0]
user.money = money - 0.1

是的,很简单但很烦人

关于python - Flask-SQLAlchemy with_for_update() 行锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40700309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com