Получить `.rowcount` запроса SQLAlchemy ORM - PullRequest
0 голосов
/ 12 ноября 2018

Как мне получить rowcount и экземпляры SQLAlchemy ORM Query за один прием в базу данных?

Если я позвоню query.all(), яполучить стандартный список, который я могу получить len() из, но это требует загрузки всего набора результатов в памяти сразу.

Если я вызываю iter(query), я получаю стандартный генератор Python, бездоступ к .rowcount базового ResultProxy.

Если я позвоню query.count(), тогда iter(query) Я делаю два обхода потенциально дорогого запроса к базе данных.

если бы мне удалось заполучить ResultProxy для Query, который дал бы мне .rowcount, то я мог бы использовать Query.instances(), чтобы получить тот же генератор, который дал бы Query.__iter__().

Но есть ли удобный способ получить ResultProxy из Query, кроме повторения того, что делают Query.__iter__() и Query._execute_and_instances()?Кажется довольно неудобным.

Уведомление

Как упомянуто Этот ответ (спасибо @ terminus ), получение ResultProxy.rowcount может или не может бытьполезен и явно предупрежден против в документации SQLAlchemy для чисто операторов "select".

Тем не менее, в случае psycopg2, .rowcount нижележащего курсора - , документированный для возвратаправильное количество записей , возвращаемых любым запросом, даже "SELECT", , если вы не используете опцию stream_results=True (спасибо @ SuperShoot ).

...