【发布时间】:2020-02-09 14:53:10
【问题描述】:
在下面的代码中,如果表中有一行:
1-partnerId 列的值和我预期的一样
2- 并且这一行的状态现在是open
插入后我想将过滤行的状态更改为booked
partner = db.session.query(TransferRequest).filter(TransferRequest.id == partner_id).one()
if partner.status == RequestStatus.open.value:
request = TransferRequest()
#set values
db.session.add(request)
db.session.commit()
db.session.query(TransferRequest). \
filter(TransferRequest.id == partner_id). \
update({"status": RequestStatus.booked.value,
"partnerId": request.id})
db.session.commit()
return "success"
else:
return "failure"
这里的问题是,当我查询具有特定 id 的项目并检查其状态时,在达到if 条件后,其他人可能会将行的状态从open 更改为booked。在这种情况下,我不能插入行,并且不能在插入后执行update 命令。
我正在寻找一种可以在事务中执行所有这 3 个查询的方法,以便所有数据情况从第一条语句锁定到结束语句。 (或者当然可以解决问题的任何其他解决方案)
【问题讨论】:
标签: python sql flask sqlalchemy flask-sqlalchemy