Как мне получить 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 ).