有一个学生,其type
属性为4。
在Flask-SQLAlchemy中
在会话1中:
user = Student.query.with_for_update(of=Student, nowait=True).filter(Student.id == 122).first()
user.type = 1
db.session.commit()
在会话2中:
user = Student.query.filter(Student.id == 122).first()
user.type -= 1
db.session.commit()
我得到的结果是用户的type
等于3,而会话1锁定行并设置type = 1时我应该得到类型= 0,然后会话2事务应该从用户的type属性中减去1
但是在会话2中,当我与会话1同时运行时:
user = Student.query.filter(Student.id == 122).update({"type": Student.type - 1})
db.session.commit()
我得到正确的输出,即学生122s type
属性= 0(与会话1事务同步)。
为什么会这样,更新查询之间有什么区别
user = Student.query.filter(Student.id == 122).first()
user.type -= 1
db.session.commit()
和
user = Student.query.filter(Student.id == 122).update({"type": Student.type - 1})
db.session.commit()
?