首页 > 解决方案 > 未指定模型时,如何使用 SQLAlchemy 计算查询的行数?

问题描述

我正在寻找一种使用 SQLAlchemy 计算从给定查询(可能包括过滤器)返回的行数的方法,但是我在网上找到的所有内容都明确使用了模型(例如此处)。我的问题是我没有模型,我只有一个 Table 对象(因为我正在处理格式不时变化的临时表)。目前我可以执行以下操作:

tbl = Table(mytablename,metadata,autoload=True, autoload_with=myengine, schema=myschemaname)
query = select([tbl]) 
filters = build_filters(...) #my function that build filters
query = query.where(and_(*filters))
conn = myengine.connect()
ResultProxy = conn.execute(query)
totalCount = len(ResultProxy.fetchall())

但它的效率很低。有没有办法在不参考任何模型的情况下有效地进行计数?

标签: python-3.xcountsqlalchemy

解决方案


尝试此处记录的 SQLAlchemy Core 'count' 函数。我相信您可以像现在一样将过滤器附加到上面。所以,(在这里不保证我的语法,但这里有一些东西可以让你开始)......

query = select([func.count()]).select_from(my_table).where(and_(*filters))
conn = myengine.connect()
ResultProxy = conn.execute(query)
totalCount = ResultProxy.fetchone()[0] 

根据文档,我相信这实际上会从数据库中生成一个 SELECT COUNT,而不是实际上将所有行从数据库中取回然后对它们进行计数。


推荐阅读