如何在SQLAlchemy查询中使用avg和sum

2024-10-06 12:30:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从我的数据集中返回一个totals/averages行,其中包含某些字段的和和和其他字段的平均值。

我可以在SQL中通过:

SELECT SUM(field1) as SumFld, AVG(field2) as AvgFld 
FROM Rating WHERE url=[url_string]

我试图将其转换为SQLAlchemy,如下所示:

totals = Rating.query(func.avg(Rating.field2)).filter(Rating.url==url_string.netloc)

但这是错误的:

TypeError: 'BaseQuery' object is not callable

Tags: 数据urlsqlstringasselectavg平均值
2条回答

You cannot use MyObject.query here, because SqlAlchemy tries to find a field to put result of avg function to, and it fails.

这不是真的。func.avg(Rating.field2).label('average')返回一个Column对象(与给定的精确类型对象相同)。所以您可以将它与查询对象的with_entities方法一起使用。

以下是您的示例:

Rating.query.with_entities(func.avg(Rating.field2).label('average')).filter(Rating.url == url_string.netloc)

你应该使用这样的东西:

from sqlalchemy.sql import func
session.query(func.avg(Rating.field2).label('average')).filter(Rating.url==url_string.netloc)

这里不能使用MyObject.query,因为SqlAlchemy试图找到一个字段来将avg函数的结果放入其中,但失败了。

相关问题 更多 >