Utilizando SQLAlchemy, tengo una relación uno a muchos con dos tablas: usuarios y puntajes. Intento consultar a los 10 mejores usuarios ordenados por su puntaje agregado durante los últimos X días.Consulta de filtro SQLAlchemy por objeto relacionado
users:
id
user_name
score
scores:
user
score_amount
created
Mi consulta actual es:
top_users = DBSession.query(User).options(eagerload('scores')).filter_by(User.scores.created > somedate).order_by(func.sum(User.scores).desc()).all()
Sé que esto claramente no es correcta, es sólo mi mejor conjetura. Sin embargo, después de mirar la documentación y buscar en Google, no puedo encontrar una respuesta.
EDIT: Tal vez que sería útil que he esbozado lo que la consulta MySQL se vería así:
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
el error en el uso de eagerload() en conjunción con criterio en contra de su unirse se explica en este Entrada de preguntas frecuentes: http: //www.sqlalchemy.org/trac/wiki/FAQ # ImusinglazyFalsetocreateaJOINOUTERJOINandSQLAlchemyis noconstruyelaquedacuandoIntentaaadherirseDONDE ESTÁDELDERECLIMITETc.queseguierelaOUTERJOIN – zzzeek