小编yya*_*ian的帖子

如何使用flask-sqlalchemy在竞争条件下确保一致的数据库更新

这可能是一个老问题。但我是数据库和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)
Run Code Online (Sandbox Code Playgroud)

有一个 Web 表单,用户用来下订单,该表单将更新由字段计数跟踪的数据库中剩余的项目数。下面的代码处理订单并根据是否有足够的项目设置不同的状态。

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
Run Code Online (Sandbox Code Playgroud)

如果用户 1 和用户 2 同时对同一商品下订单,并且还剩 5 件商品。也许 user1 的请求首先到达 3 个订单。那么当user2的请求到达时,user1的订单可能还没有提交。所以 user2 还看到了 5 个项目。所以最后,数据库中剩下的项目是2;user1 和 user2 …

python database postgresql flask-sqlalchemy

5
推荐指数
1
解决办法
1813
查看次数

为什么遍历列表比遍历python中的迭代器要慢得多?

我想知道为什么迭代列表要比Python 2.7中的迭代器慢得多。以下是示例代码和输出。

import timeit
stmt = """
    for i in range(1000000):
        pass
    """
print "================for loop with list=================="
t = timeit.Timer(stmt)
print min(t.repeat(3, 100))

print "================for loop with iterator=================="
stmt = """
    for i in seq:
        pass
    """
t = timeit.Timer(stmt, setup = "seq = iter(range(1000000))")
print min(t.repeat(3, 100))
Run Code Online (Sandbox Code Playgroud)

输出:

================for loop with list==================
2.61899293756
================for loop with iterator==================
0.0191696885382
Run Code Online (Sandbox Code Playgroud)

似乎在迭代器上进行迭代比在列表上进行迭代快十倍以上。

python performance iterator list

1
推荐指数
1
解决办法
104
查看次数