How to use avg and sum in SQLAlchemy query

attention = Attention_scores.query
    .with_entities(func.avg(Attention_scores.score))
    .filter(classroom_number == classroom_number)
    .all()

I tried it like this and it gave the correct average.


You should use something like:

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

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


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

This isn't exactly true. func.avg(Rating.field2).label('average') returns a Column object (the same type object that it was given to be precise). So you can use it with the with_entities method of the query object.

This is how you would do it for your example:

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