I'm trying to return a totals/averages row from my dataset which contains the SUM of certain fields and the AVG of others.
I could do this in SQL via:
SELECT SUM(field1) as SumFld, AVG(field2) as AvgFld
FROM Rating WHERE url=[url_string]
My attempt to translate this into SQLAlchemy is as follows:
totals = Rating.query(func.avg(Rating.field2)).filter(Rating.url==url_string.netloc)
But this is erroring out with:
TypeError: 'BaseQuery' object is not callable
You should use something like:
You cannot use
MyObject.query
here, because SqlAlchemy tries to find a field to put result ofavg
function to, and it fails.This isn't exactly true.
func.avg(Rating.field2).label('average')
returns aColumn
object (the same type object that it was given to be precise). So you can use it with thewith_entities
method of the query object.This is how you would do it for your example: