SQLAlchemy(Postgresql)竞争条件

2024-05-18 04:26:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我们正在编写一个库存系统,我有一些关于sqlalchemy(postgresql)和事务/会话的问题。这是一个使用TG2的web应用程序,不确定这是否重要,但对很多信息来说,这从来都不是坏事。在

  1. 如何确保在改变库存量时,我不会遇到竞争情况。如果我理解正确的话,如果用户on要将一个项目的库存减少到0,而用户2也试图将库存减少到0,那么如果用户1s会话尚未提交,那么用户2开始的库存编号将与用户1相同,从而导致双方都提交时出现竞争条件,一个覆盖另一个而不是产生复合效果。

  2. 如果我想将postgresql序列用于订单号/发票号之类的事情,如何才能从sqlalchemy获取/设置下一个值而不遇到竞争条件?

编辑:我想我找到了我需要用的解决方案,用于更新或共享。如果我弄错了,我将留待更多的答案或其他人来纠正我。在

TIA公司


Tags: 用户web信息应用程序sqlalchemyonpostgresql系统
2条回答

如果两个事务试图同时设置相同的值,其中一个将失败。失败的将需要错误处理。对于您的特定示例,您将希望查询同一事务中的部件数并更新部件数。在

序列号上没有竞争条件。保存使用DB将自动分配的序列号的记录。在

编辑:

注意Limscoder指出,您需要将隔离级别设置为可重复读取。在

设置您正在讨论的场景,并查看配置如何处理它。只需打开两个独立的连接来测试它。在

还要阅读更新For Update和事务隔离级别Isolation Level

相关问题 更多 >