所以我读过the documentation并说:
Cursor.rowcount¶
虽然是Cursor类的 sqlite3模块实现了这一点 属性,数据库引擎自己的 支持确定“行 受影响的“/”行选择“是古怪的。
这包括SELECT语句 因为我们无法确定数量 查询生成的行直到所有 行被提取。
为什么在执行SELECT之后,我不能用它来确定返回的行数。当然,已经执行的查询现在已经获取了所有行?
答案 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语句之间插入/删除行。