在Python sqlite3模块中,为什么cursor.rowcount()不能告诉我select语句返回的行数

时间:2011-02-06 03:41:54

标签: python sql sqlite

所以我读过the documentation并说:

  

Cursor.rowcount¶

     

虽然是Cursor类的   sqlite3模块实现了这一点   属性,数据库引擎自己的   支持确定“行   受影响的“/”行选择“是古怪的。

     

这包括SELECT语句   因为我们无法确定数量   查询生成的行直到所有   行被提取。

为什么在执行SELECT之后,我不能用它来确定返回的行数。当然,已经执行的查询现在已经获取了所有行?

1 个答案:

答案 0 :(得分:9)

SQLite在最初处理查询时不会“获取”所有行。每次执行准备好的查询时,它都会返回一行。

来自SQLite3常见问题here

问)哪个func可以得到行数?

A)没有函数可以检索结果集中的行数。 SQLite事先不知道该数字,但在遍历表时逐行返回。应用程序可以在每次成功的sqlite3_step()时根据需要递增行计数器。

一些包装器能够收集内存表中结果集中的所有行,因此它们可以返回行数。

您始终可以获得某些SELECT语句将以某些性能为代价返回的行数:

BEGIN IMMEDIATE TRANSACTION;
SELECT COUNT(*) FROM x WHERE y;
SELECT a,b,c FROM x WHERE y;
ROLLBACK TRANSACTION;

您必须在事务中包装它以防止其他连接在两个SELECT语句之间插入/删除行。

相关问题