Cómo devolver el recuento de entidades relacionadas en la consulta sqlalchemy

Soy nuevo en sqlalchemy, y aunque la documentación parece bastante completa, no pude encontrar la manera de hacer lo que quiero.

Digamos que tengo dos tablas: foro y post. Cada foro tiene un foro de padres y cualquier número de publicaciones. Lo que quiero es:

Una lista de foros de alto nivelForos de niños cargados con entusiasmo accesibles a través de los foros de nivel superiorUn conteo de publicaciones para cadaniño foro

Así que empecé con:

 query(Forum).filter(Forum.parent==None).all()

Lo que me da todos los foros de nivel superior. Por supuesto, al acceder a los foros secundarios se obtienen n consultas selectas.

 query(Forum).options(eagerload('children')).filter(Forum.parent==None).all()

Esto resuelve el problema de selección 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 intentado algunas variaciones, pero no he ido más lejos. Solo por claridad 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

Respuestas a la pregunta(1)

Su respuesta a la pregunta