让 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
(而不是抛出异常)的额外优势。
当我通过 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
(而不是抛出异常)的额外优势。