Mine
public text v1 · immutablesel = select([Address.user_id, func.count(Address.id).label('count')]).group_by(Address.user_id).alias()
print User.query.outerjoin(('addresses', sel)).add_column(sel.c.count).all()
SELECT users.id AS users_id, users.name AS users_name, anon_1.count AS anon_1_count
FROM users LEFT OUTER JOIN (SELECT addresses.user_id AS user_id, count(addresses.id) AS count
FROM addresses GROUP BY addresses.user_id) AS anon_1 ON users.id = anon_1.user_id ORDER BY users.oid