我们正在编写一个库存系统,我有一些关于sqlalchemy(postgresql)和事务/会话的问题。这是一个使用TG2的web应用程序,不确定这是否重要,但对很多信息来说,这从来都不是坏事。在
如何确保在改变库存量时,我不会遇到竞争情况。如果我理解正确的话,如果用户on要将一个项目的库存减少到0,而用户2也试图将库存减少到0,那么如果用户1s会话尚未提交,那么用户2开始的库存编号将与用户1相同,从而导致双方都提交时出现竞争条件,一个覆盖另一个而不是产生复合效果。
如果我想将postgresql序列用于订单号/发票号之类的事情,如何才能从sqlalchemy获取/设置下一个值而不遇到竞争条件?
编辑:我想我找到了我需要用的解决方案,用于更新或共享。如果我弄错了,我将留待更多的答案或其他人来纠正我。在
TIA公司
如果两个事务试图同时设置相同的值,其中一个将失败。失败的将需要错误处理。对于您的特定示例,您将希望查询同一事务中的部件数并更新部件数。在
序列号上没有竞争条件。保存使用DB将自动分配的序列号的记录。在
编辑:
注意Limscoder指出,您需要将隔离级别设置为可重复读取。在
设置您正在讨论的场景,并查看配置如何处理它。只需打开两个独立的连接来测试它。在
还要阅读更新For Update和事务隔离级别Isolation Level
相关问题 更多 >
编程相关推荐