2017-10-16 65 views
1

当我通过pyodbc从SQL数据库中选择数据时,我遇到了一个问题,最终导致出现这种类型的结果。让pyodbc为只返回一个项目的查询返回一个简单(标量)值

[(55.0)]

我想要的纯数(没有“[”或“(”,所以我以后可以用它来计算新的东西后将其插入到一个不同的表。我。我相信这是微不足道的,但我只是一直无法弄清楚如何下面是我使用的代码:

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

但是,在这里您获取所有记录,并且您只打印第一个记录? –

回答

1

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

singlerow = rows[0] 
price, = singlerow 

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

为未来的读者
1

注:pyodbc光标对象有一个fetchval方法:

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

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

因此,而不是做一些像

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

,我们可以做

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

它返回None的附加优势(而不是抛出一个例外)如果查询没有返回任何行。