对于pyodbc,
cursor.execute()
返回游标对象本身。你仍然需要单独检索结果。
你可以循环遍历游标以获取行;
list()
可以为您执行循环并将所有行拉入列表对象:
cursor.execute("select count(*) from fixtures")
print(list(cursor))
您可以调用
cursor.fetchall()
。
对于只有一行的结果集,您可以使用:
cursor.execute("select count(*) from fixtures")
result = cursor.fetchone()
cursor.fetchone()
会返回一行数据,如果没有结果则返回None
。
不管结果如何,每行都是由多个列组成的序列,对于只有一列的结果,将返回一个只包含一个值的元组。
在您的示例查询中,您正在获取单个行和单个列,因此可以使用cursor.fetchone()
获取单个值,然后使用索引或元组赋值来获取该值,例如:
cursor.execute("select count(*) from fixtures")
fixture_count = cursor.fetchone()[0]
或者
cursor.execute("select count(*) from fixtures")
fixture_count, = cursor.fetchone()
您不需要在 SELECT
后提交,但您实际上也没有调用 commit()
方法,您缺少了 ()
部分。如果您正在更改数据,请记得使用 cursor.commit()
。请注意,cursor.commit()
和 cnxn.commit()
执行的是完全相同的操作;事务是按连接而非按游标管理的。
然而,当不使用 autocommit
时,更容易且更好地使用连接作为上下文管理器,以确保根据是否存在任何异常来中止或提交事务:
with cnxn:
label_object.set(str(cursor.fetchone()[0]))
应该可以解决问题。 - Martijn Pieterscursor.fetchone()
,没有下划线! - joshi123