В модуле sqlite3 Python, почему же cursor.rowcount () не может сказать мне количество строк, возвращаемых оператором select - PullRequest
2 голосов
/ 06 февраля 2011

Итак, я прочитал документацию и там написано:

Cursor.rowcount¶

Хотя класс Cursor модуля sqlite3 реализует этот атрибутсобственная поддержка ядром базы данных определения «затронутых строк» ​​/ «выбранных строк» ​​является странной.

Это включает в себя операторы SELECT, поскольку мы не можем определить количество строк, произведенных запросом, пока все строки не были извлечены.

Почему сразу после выполнения SELECT я не могу использовать это, чтобы определить количество возвращаемых строк.Конечно, после выполнения запроса были получены все строки?

1 Ответ

9 голосов
/ 06 февраля 2011

SQLite не «извлекает» все строки при первоначальной обработке запроса. Он возвращает одну строку каждый раз при выполнении подготовленного запроса.

Из FAQ по 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...