Utilizzo di SQLAlchemy, ho una relazione uno a molti con due tabelle: utenti e punteggi. Sto cercando di interrogare i primi 10 utenti ordinati per il loro punteggio aggregato nell'ultimo periodo di X giorni.SQLAlchemy query di filtro per oggetto correlato
users:
id
user_name
score
scores:
user
score_amount
created
La mia domanda attuale è:
top_users = DBSession.query(User).options(eagerload('scores')).filter_by(User.scores.created > somedate).order_by(func.sum(User.scores).desc()).all()
So che questo è chiaramente non è corretta, è solo la mia ipotesi migliore. Tuttavia, dopo aver consultato la documentazione e googling, non riesco a trovare una risposta.
EDIT: Forse sarebbe utile se ho abbozzato quello che la query MySQL sarà simile:
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'errore utilizzando eagerload() in combinazione con criterio contro il suo join viene spiegato in questo Voce delle domande frequenti: http: //www.sqlalchemy.org/trac/wiki/Domande frequenti # ImusinglazyFalsetocreateaJOINOUTERJOINeSQLAlchemy non è in grado di ricostruire l'interrogazione quando l'oggetto è in esecuzioneWHEREORDERBYLIMITetc.che si trova nell'interfacciaOUTERJOIN – zzzeek