【发布时间】:2016-01-23 19:32:53
【问题描述】:
这可能是一个老问题。但我是数据库和flask-sqlalchemy 的新手,无法从以前的帖子中找到任何答案。也许答案很简单。
我正在尝试使用 postgresql 将 Flask 应用程序部署到 Heroku。它具有以下模型,即库存跟踪剩余库存的数量。
class Inventory(db.Model):
__tablename__ = 'inventories'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
count = db.Column(db.Integer)
有一个网络表单,用户可以在其中下订单,该表单将更新由字段 count 跟踪的数据库中剩余的商品数量。下面的代码处理订单并根据是否有足够的物品设置不同的状态。
item = Inventory.query.filter_by(name=form.name.data).first()
order = int(form.count.data)
if item.count > order:
item.count -= order
db.session.add(item)
db.session.commit()
status = ('%r: %d left' % (item.name, item.count))
else:
status = '%r not enough left' % item.name
如果用户 1 和用户 2 同时对同一个商品下单,则剩余 5 件商品。也许 user1 的请求首先到达 3 个订单。那么当user2的请求到达时,user1的订单可能还没有提交。所以 user2 也看到剩下 5 个项目。所以最后,数据库中剩下的项目是2; user1 和 user2 都为每个用户成功下了 3 件商品的订单,尽管一开始只剩下 5 件商品,这已经足够了。如何避免这个问题?
【问题讨论】:
标签: python database postgresql flask-sqlalchemy