【问题标题】:How to count the number of rows from query with SQLAlchemy when no model is specified?未指定模型时,如何使用 SQLAlchemy 计算查询的行数?
【发布时间】:2020-01-29 21:19:28
【问题描述】:

我正在寻找一种方法来使用 SQLAlchemy 计算从给定查询(可能包括过滤器)返回的行数,但我在网上找到的所有内容都明确使用了模型(例如 here) .我的问题是我没有模型,我只有一个 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())

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

【问题讨论】:

  • 您是否要在 mytablename 上执行 select count(*) 而不实际查询所有记录?
  • 我想计算对表的查询返回的行数是的,但该查询可以包含过滤器。例如,我想做: select count(*) from mytable where temperature>80 and city=Dallas

标签: python-3.x count sqlalchemy


【解决方案1】:

尝试使用here 记录的 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,而不是实际上将所有行从数据库中取回然后对它们进行计数。

【讨论】:

  • 抱歉,我不确定是否理解。您的意思是“计数”而不是“总和”吗?你能举个例子吗?我看到了如何对我的表进行计数 (query = select([func.count()]).select_from(tbl)) 但不是对我过滤的查询。
  • 对不起帕特里克,是的,我的意思是伯爵。我将修改我的答案以表明这一点。
  • 不客气,帕特里克。感谢您提供帮助的机会!
  • 其实你的最后一行应该是:totalCount = ResultProxy.fetchone()[0]
猜你喜欢
  • 2012-10-08
  • 1970-01-01
  • 2022-01-24
  • 2021-07-23
  • 2018-09-28
  • 2021-08-01
  • 2012-02-24
  • 2021-12-27
  • 1970-01-01
相关资源
最近更新 更多