如何行数的工作。我使用pyodbc它总是返回-1。
return_query = conn.query_db_param(query, q_params)
print(return_query.rowcount)
def query_db_param(self, query, params):
self.cursor.execute(query,params)
print(self.cursor.rowcount)
rowcount
指的是受上一操作的行数。所以,如果你做一个insert
并插入只有一行,那么它将返回1.如果您更新200行,那么它将返回200。另一方面,如果你SELECT
,最后的操作并没有真正影响行它是一个结果集。在这种情况下,0
将语法不正确,所以界面返回-1
代替。
它也将返回-1
的,你做的事情,比如集合变量的操作或使用创建/修改命令。
要连接到不能给你号码查询数据库。如你取结果,扫描他们的内部表和索引数据结构为下一个匹配的结果,你有那么多的数据库引擎产生行。该引擎可以不知道最终计数,直到获取所有行。
当行数不知道,在Python DB-API 2.0 specification for Cursor.rowcount
状态的数量必须被设置在这种情况下,以-1
:
该属性是
-1
万一[...]的最后一个操作的行数,则不能由接口确定。
该pyodbc Cursor.rowcount
documentation符合这个要求:
由过去的SQL语句修改的行数。
这是-1,如果没有SQL已执行,或者如果行数是未知的。请注意,这是不寻常的数据库报告-1性能原因SQL SELECT语句之后。 (第一记录返回到应用程序之前的精确数目可能不是已知的。)
pyodbc不单单是这个,另一个易于链接到例如是Python标准库sqlite3
模块;这是Cursor.rowcount
documentation状态:
根据需要由Python DB API规格,行数属性“是-1的情况下,没有
executeXX()
已上的光标进行或最后一个操作的行数不是由接口确定”。这包括SELECT
声明,因为我们不能确定查询产生直到所有行均取的行数。
请注意,对于数据库实现的子集,该行计数值可以获取一些行后更新。你必须检查特定数据库的文档要连接到,看看是否能实现可以做到这一点,或者如果行数必须保持在-1。你总是可以尝试,当然。
你可以执行COUNT()
第一选择,或者,如果结果集预计不会太大,使用cursor.fetchall()
和结果列表上使用len()
。