让 pyodbc return 为仅 return 一项的查询提供一个简单(标量)值

Have pyodbc return a simple (scalar) value for a query that only returns one item

当我通过 pyodbc select 来自 SQL 数据库的数据时,我遇到了一个问题,我最终得到了这种类型的结果。

[(55.0, )]

我想要纯数字(没有“[”或“(”,所以我以后可以在用它计算新的东西后将它插入不同的 table。我相信它很简单,但我只是没有'无法弄清楚如何。下面是我使用的代码:

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

你有 [(55.0, )] 因为你有一个行列表(在这个例子中包含一行),并且每一行都是一个元组(只有一个元素,因为你只是 selected price)。你可以做到

singlerow = rows[0]
price, = singlerow

但是,仅将所有行提取到 select 似乎很奇怪,您可能应该重新考虑您的查询。

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

The fetchval() convenience method returns the first column of the first row if there are results, otherwise it returns None.

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

所以不要做像

这样的事情
row_count = crsr.execute("SELECT COUNT(*) FROM TableName").fetchone()[0]

我们可以做到

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

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