У меня есть модель под названием «Пользователь», а «Пользователь» имеет «Деньги».
Существует сценарий, что несколько сеансов могут читать модель «Пользователь» и обновлять «деньги» одновременно.Flask-SQLAlchemy with_for_update() блокировка строки
Сессия 2 должна считывать значение «деньги» после успешного завершения сеанса 1.
Я попытался заблокировать строку «Пользователь» при обновлении.
Вот мой код.
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
Сессия 2 не читал обновленное значение.
Я бы очень хотел знать, где проблема.