flask-sqlalchemywith_for_update互斥锁
业务中有个需求,就是可能会遇到并发读取某⼀⾏数据,然后修改这⾏数据,这时候就涉及到并发的锁了
⽐如:
address表有个user_id=3的字段的status如果为0则要update,为1则不需要,如果没有锁,当两个session同时访问到user_id为3的字段时,此时status都为0,那么两个session都会对数据库做⼀次update,这等于update了两次,那么怎么避免这种情况呢?就要⽤到with_for_update()⽅法了:
下⾯是session1的代码
session1:
addr = Address.query.filter_by(user_id=3).with_for_update().first
if addr.status == 0:
addr.status = 1
sql中update什么意思
db.sessionmit()
下⾯是session2的代码:
session2:
addr = Address.query.filter_by(user_id=3).with_for_update().first
if addr.status == 0:
addr.status = 1
db.sessionmit()
那么当session1抢先拿到锁的时候,在执⾏到最后的commit之前,session2都会卡住,当session1释放锁,session2拿到锁之
后,status已经改为1了.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论