Se você precisar disso com frequência e/ou a contagem for parte integrante do seu
Tab1
model, você deve usar uma propriedade híbrida, conforme descrito na outra resposta. Se, por outro lado, você precisar disso apenas para uma única consulta, basta criar a subconsulta escalar usando Query.label()
, ou Query.as_scalar()
:count_stmt = session.query(func.count(1)).\
filter(Tab2.tab1_id == Tab1.id).\
group_by(Tab2.col1).\
label('cnt')
session.query(Tab1, count_stmt).filter(...).limit(100)
A subconsulta correlacionará automaticamente o que puder da consulta anexa.