python - SQLAlchemy: filter on operator in a many-to-many relationship -


i have 2 classes many-to-many relationship, items , categories.

categories have associated value.

i query items highest categorie.value (if there any) less given value.

so far have tried queries this:

from sqlalchemy.sql import functions  session.query(items).join(categories,items.categories).filter(functions.max(categories.value)<3.14).all() 

but in case (operationalerror) misuse of aggregate function max() error.

is there way make query?

you need group by , having instead of where filtering on aggregate.

session.query(items).join(items.categories).group_by(items.id).having(functions.max(categories.value)<3.14).all() 

edit: include items without category, believe can outer join , put or in having clause:

session.query(items).outerjoin(items.categories).group_by(items.id)\ .having( (functions.max(categories.value)<3.14) | (functions.count(categories.id)==0) )\ .all() 

Comments

Popular posts from this blog

javascript - ScrollTo Effect (href to div) -

javascript - ng-class not responding to change in model in Angular? -

javascript - document.registerElement extending HTMLInputElement prototype while using custom tag name to avoid implicit browser style -