En utilisant SQLAlchemy, j'ai une relation de un à plusieurs avec deux tables - utilisateurs et scores. J'essaie d'interroger les 10 meilleurs utilisateurs triés par leur score global au cours des X derniers jours.Requête de filtre SQLAlchemy par objet connexe
users:
id
user_name
score
scores:
user
score_amount
created
Ma requête en cours est:
top_users = DBSession.query(User).options(eagerload('scores')).filter_by(User.scores.created > somedate).order_by(func.sum(User.scores).desc()).all()
Je sais que cela est clairement pas correct, il est juste ma meilleure estimation. Cependant, après avoir regardé la documentation et googling, je ne trouve pas de réponse.
EDIT: Peut-être que cela aiderait si je dessinai ce que la requête MySQL ressemblerait à ceci:
SELECT user.*, SUM(scores.amount) as score_increase
FROM user LEFT JOIN scores ON scores.user_id = user.user_id
WITH scores.created_at > someday
ORDER BY score_increase DESC
l'erreur dans l'utilisation eagerload() conjointement avec le critère par rapport à son jointure est expliqué dans ce Entrée FAQ: http: //www.sqlalchemy.org/trac/wiki/FAQ # ImusinglazyFalsetocreateaJOINOUTERJOINandSQLAlchemyisnotconstructingthequerywhenItrytoaddaWHEREORDERBYLIMITetc.whichreliesupontheOUTERJOIN – zzzeek