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

python - mat is not a numerical tuple : openCV error -

c# - MSAA finds controls UI Automation doesn't -

wordpress - .htaccess: RewriteRule: bad flag delimiters -