Запрос SA (с использованием подзапроса) даст вам нужные результаты:
sq = session.query(Child.parent_id, func.count(Child.id).label("child_num")).group_by(Child.parent_id)
sq = sq.subquery()
# use outerjoin to have also those Parents with 0 (zero) children
q = session.query(Parent, sq.c.child_num).outerjoin(sq)
q = q.filter(Parent.id == 1) # add your filter here: ui.invited_by = u.id
for x in q.all():
print x
, хотя подзапрос не совсем такой, как вы описали, а скорее что-то вроде:
SELECT parent.*,
anon_1.child_num AS anon_1_child_num
FROM parent
LEFT JOIN (SELECT child.parent_id AS parent_id,
count(child.id) AS child_num
FROM child
GROUP BY child.parent_id
) AS anon_1
ON parent.id = anon_1.parent_id
Все еще не понимаю, зачем вам подзапрос, как вы описали.