获取SQLAlchemy ORM查询的`.rowcount`

时间:2018-11-12 14:13:46

标签: python orm sqlalchemy psycopg2

如何在一次数据库往返中同时获取rowcount和SQLAlchemy ORM Query的实例?

如果我调用query.all(),则会得到一个标准列表,可以得到其中的len(),但这需要立即将整个结果集加载到内存中。

如果我调用iter(query),则会返回一个标准的python生成器,无法访问基础.rowcount的{​​{1}}。

如果我致电ResultProxy,那么query.count()我正在两次往返一次可能很昂贵的查询到数据库。

如果我设法为iter(query)持有ResultProxy,那将给我Query,那么我可以使用.rowcount来获得与Query.instances()会给我。

但是除了重复Query.__iter__()ResultProxy的工作之外,是否有一种便捷的方法来达到Query的{​​{1}}?似乎很不方便。

通知

This answer所述(感谢@terminus),获取Query.__iter__()可能有用也可能没有用,并且在SQLAlchemy文档中明确警告不要使用纯“ select”语句。< / p>

也就是说,对于Query._execute_and_instances(),任何查询(甚至是“ ResultProxy.rowcount”个查询{{3 }}(感谢documented to return the correct number of records)。

0 个答案:

没有答案