这可能是一个老问题。但我是数据库和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 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)
似乎在迭代器上进行迭代比在列表上进行迭代快十倍以上。