admin

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

sql

所以我已经阅读了文档,上面写着:

游标。行计数露

尽管sqlite3模块的Cursor类实现了此属性,但是数据库引擎自己对确定受影响的流''/选定的流’‘的支持是奇怪的。

这包括SELECT语句,因为在获取所有行之前,我们无法确定查询产生的行数。

怎么了,在执行SELECT之后,我无法立即使用它来确定返回的行数。确定执行了查询后,现在已经获取了所有行吗?


阅读 386

收藏
2021-06-07

共1个答案

admin

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

此处的SQLite3常见问题解答

问)哪个函数可以获取行数?

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语句之间插入/删除行。

2021-06-07