【问题标题】:Have pyodbc return a simple (scalar) value for a query that only returns one item让 pyodbc 为仅返回一项的查询返回一个简单(标量)值
【发布时间】:2017-10-16 17:51:05
【问题描述】:

当我通过 pyodbc 从 SQL 数据库中选择数据时遇到问题,我最终得到了这种类型的结果。

[(55.0, )]

我想要纯数字(没有“[”或“(”,所以我以后可以在用它计算新东西后将它插入到另一个表中。我确信这很简单,但我只是无法弄清楚如何。下面是我正在使用的代码:

rows = conn.execute("SELECT price from PG").fetchall()
print(rows[:1])

【问题讨论】:

  • 但是在这里你获取所有记录,你只打印第一个?

标签: python pyodbc


【解决方案1】:

未来读者请注意:pyodbc Cursor 对象有一个fetchval 方法:

fetchval() 便捷方法如果有结果则返回第一行的第一列,否则返回 None。

(类似于.NET的ExecuteScalar()方法。)

所以不要做类似的事情

row_count = crsr.execute("SELECT COUNT(*) FROM TableName").fetchone()[0]

我们可以这样做

row_count = crsr.execute("SELECT COUNT(*) FROM TableName").fetchval()

如果查询没有返回任何行,它具有返回None(而不是抛出异常)的额外优势。

【讨论】:

【解决方案2】:

你有[(55.0, )],因为你有一个行列表(在这个例子中包含一行),每一行都是一个元组(只有一个元素,因为你刚刚选择了price)。你可以这样做

singlerow = rows[0]
price, = singlerow

但是,获取所有行以仅选择一个似乎很奇怪,您可能应该重新考虑您的查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    相关资源
    最近更新 更多