我有一个名叫 "User" 的模型,其中包含 "Money" 字段。
存在这样一种情况:多个会话可以同时读取模型 "User" 并更新 "Money" 字段。
第二个会话应该在第一个会话成功更新后读取 "Money" 值。
我尝试在更新时锁定 "User" 行。
以下是我的代码:
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')
我同时打开了两个会话来运行这段代码,输出结果为
000000
111111
User:1***125.3-0.1 = 125.2
000000
111111
22222
User:1***125.3-0.1 = 125.2
22222
第二个会话没有读取更新后的值。
我真的很想知道问题出在哪里。