Определите отношения между вашими таблицами при определении модели orm.См. этот урок .В вашем примере Work
является таблицей ассоциации, поэтому, если у вас нет других данных в Work
, вы можете использовать отношение многие ко многим например:
from sqlalchemy.orm import relationship
class Work
id
employee_id
location_id
class Employee
id
name
class Location
id
city
employees = relationship(Employee, secondary=Work, backref='locations')
Затем запрос:
session.query(Location, func.count(Work.id)).outerjoin(Work).group_by(Location)
Поскольку вы определили отношение, sqlalchemy будет знать направление и столбцы для outerjoin
.
Когда вы делаете group_by
, важно передать Location
, а не просто Location.id
, потому что, выполнив select(Location)
, sqlalchemy выберет все столбцы в Location, и поэтому вы также должны передатьвсе столбцы в местоположении.