【问题标题】:How to do arithmetic in Python with SQLite database selections如何使用 SQLite 数据库选择在 Python 中进行算术运算
【发布时间】:2017-12-17 02:22:59
【问题描述】:

我正在尝试从我的数据库中添加(而不是连接)单个 SQLite 选择,但它会将值作为列表返回并尝试连接它。 我正在查看“总计 = 用户 + 价值”这一行。 我正在开发一个管理模拟股票投资组合交易的网络烧瓶应用程序。请帮忙! 'users' 表的 'cash' 列是 NUMERIC,'portfolio' 表的 'shares' 和 'price' 列是 INTEGER 和 NUMERIC

users = db.execute("SELECT cash FROM users WHERE id = :id", id=session["user_id"])
portfolio = db.execute("SELECT * FROM portfolio WHERE id = :id", id=session["user_id"])

values = 0
total = users
if portfolio:
    for each in portfolio:
        values= values + (each.shares * each.price)
        total = users + values

#value = usd( total )
value = users
return render_template("index.html", stock=portfolio, user=users, value=value)

【问题讨论】:

  • 您的 users 变量是 sqlite3.Cursor 对象,total 也是如此。您正在尝试将 'sqlite3.Cursor' 和 'float' 相加,我认为 total = users + values 甚至无法运行。

标签: python list sqlite math concatenation


【解决方案1】:

正如 luochenhuan 在 cmets 中指出的那样,sqlite3.execute 返回一个 sqlite3.Cursor 对象,因此您的 userportfolio 变量实际上是游标,而不是值的可迭代集合。为了使这些可迭代,您需要在这些上调用.fetchall() 方法以获取结果列表。

一旦你这样做了,这些列表中的每个结果都将是一个表示 SQLite 数据库中行的元组,而不是具有命名属性的属性。因此,要获取您感兴趣的值,您要么必须通过索引访问它们,要么将它们加载到 Collections.namedtuple 实例中以通过命名属性访问它们。

【讨论】:

  • 感谢您澄清我的错误。游标对象在括号内返回一个JSON-esque对象,是否有一种简单的方法可以从这个'users'表中引用值:[{'id': 1, 'username': 'truth', 'hash': 'PassW0rd '}]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
相关资源
最近更新 更多