Soy nuevo en sqlalchemy, y si bien la documentación parece bastante exhaustiva, no pude encontrar una manera de hacer todo lo que quiero.Cómo devolver el conteo de entidades relacionadas en sqlalchemy query
Digamos que tengo dos tablas: foro y publicación. Cada foro tiene un foro principal y cualquier cantidad de publicaciones. Lo que quiero es:
- Una lista de los foros de alto nivel
- impaciencia cargados-foros accesibles a través de los foros de alto nivel
- Es un recuento de mensajes para cada niño foro
Así que comencé con:
query(Forum).filter(Forum.parent==None).all()
Lo que me da todo el nivel superior foros. Por supuesto, acceder a los foros secundarios produce n consultas selectivas.
query(Forum).options(eagerload('children')).filter(Forum.parent==None).all()
Esto resuelve el n problema de selección.
Ahora mi mejor conjetura es algo como esto:
query(Forum, func.count(Forum.children.posts)).options(eagerload('children')).filter(Forum.parent==None).group_by(Forum.children.id).all()
Pero todo lo que consigo es:
AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object has an attribute 'posts'
He probado algunas variaciones, pero no tengo más. Sólo por la claridad que estoy buscando el equivalente de este 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