为什么这样做:
cash = db.execute("SELECT cash FROM users WHERE id = :user_id", user_id = session["user_id"])
# Ensure user can afford the stock
if cash[0]["cash"] < share * quote["price"]:
return apology("Not enough money")
这不是:
cash = db.execute("SELECT cash FROM users WHERE id = :user_id", user_id = session["user_id"])
# Ensure user can afford the stock
if cash < share * quote["price"]:
return apology("Not enough money")
我想了解DB查询如何在python中工作。那“现金”变量存储是什么?这不是用户的现金价值吗? (int)
答案 0 :(得分:2)
db.execute
返回一个矩阵/表结构。在此特定示例中,该矩阵称为现金,该矩阵只有一列再次称为现金,并且其中只有一个值。
因此,让我们稍微修改一下查询以更好地理解它。如果您的查询是:
result = db.execute("SELECT * FROM users WHERE id = :user_id", user_id = session["user_id"])
假设结果如下:
当您查询此内容时:
result[0]["cash"]
它将返回100。
如果仅选择cash
而不是*
,则此表仅会显示一列(即您正在执行的操作):
同样,result[0]["cash"]
将给您100。
如果我是你,我不会select *
。 select cash
很好,因为它仅获取需要的内容。如果要存储该现金值以供以后使用,请以与现在相同的方式调用数据库,然后创建一个变量cashValue = result[0]["cash"]
并使用它。另外,不要用相同的名称命名不同的对象,这会使您感到困惑。如果数据库表中有一列名为cash
的列,请调用其他输出,例如result
。然后,如果您想获取其中的值,请再次调用其他名称,例如cashValue
。
希望这可以澄清一切。
答案 1 :(得分:1)
您在cash
中收到的是结果集。您可以将其视为类似于结构的表格。
因此,cash[0]
表示索引0上的“行”,cash[0][cash]
表示索引0上的“行”中的“字段”现金