Sono nuovo in sqlalchemy e, mentre la documentazione sembra abbastanza approfondita, non sono riuscito a trovare un modo per fare esattamente quello che voglio.Come restituire il conteggio delle entità correlate nella query sqlalchemy
Dire che ho due tavoli: forum e posta. Ogni forum ha un forum principale e un numero qualsiasi di post. Quello che voglio è:
- Una lista di forum di alto livello
- Ardentemente caricati-forum accessibili attraverso il forum di alto livello
- Un conteggio dei posti per bambino forum
Quindi ho iniziato con:
query(Forum).filter(Forum.parent==None).all()
Quale mi dà tutto il livello più alto forum. Naturalmente l'accesso ai forum figli produce n query selezionate.
query(Forum).options(eagerload('children')).filter(Forum.parent==None).all()
Questo risolve il problema di selezione n.
Ora la mia migliore ipotesi più o meno così:
query(Forum, func.count(Forum.children.posts)).options(eagerload('children')).filter(Forum.parent==None).group_by(Forum.children.id).all()
Ma tutto quello che ottiene è:
AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object has an attribute 'posts'
Ho provato un paio di varianti, ma non ho più alcuna. Solo per chiarezza che sto cercando l'equivalente di questo SQL:
select Forum.*, Child.*, count(Post.id)
from Forum
left join Forum Child on Child.parent = Forum.id
left join Message on Message.forum = Child.id
where Forum.parent is null
group by Child.id