我们正在编写一个库存系统,我对 sqlalchemy (postgresql) 和事务/会话有一些疑问。这是一个使用 TG2 的网络应用程序,不确定这是否重要,但对于很多信息来说从来都不是坏事。
如何确保在更改库存数量时我不会遇到竞争条件。如果我理解正确,如果用户将减少某个项目的库存以说 0 并且用户 2 也试图将库存减少到 0,那么如果用户 1 的会话尚未提交,那么用户 2 的起始库存编号将会与用户相同,当两者都提交时导致竞争条件,一个覆盖另一个而不是产生复合效果。
如果我想将 postgresql 序列用于订单/发票编号等内容,我如何从 sqlalchemy 获取/设置下一个值而不会遇到竞争条件?
编辑:我想我找到了我需要使用 with_lockmode 的解决方案,用于更新或共享。如果我弄错了,我将保留更多答案或让其他人纠正我。
TIA