python-3.x - 未指定模型时,如何使用 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())
但它的效率很低。有没有办法在不参考任何模型的情况下有效地进行计数?
解决方案
尝试此处记录的 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,而不是实际上将所有行从数据库中取回然后对它们进行计数。
推荐阅读
- javascript - 隐藏后div不显示
- android - 适用于 Android 的 Firebase 数据库
- c# - 实体框架 6 - 检索模型命名空间
- python-3.x - Flask 应用程序 Amazon Elastic Beanstalk 无法作为 python 模块加载
- go - 使用 vendored 导入模拟接口
- python - 神经网络 - ValueError:无法输入形状的值
- angular - Angular 6 不是函数异常
- javascript - 将多个数组合并为一个数组
- python - 无法获取heroku procfile
- google-cloud-platform - 压缩谷歌云存储桶中的目录,然后下载到本地目录