[英]SqlAlchemy Left Join with count
class Employee
id
name
class Location
id
city
class Work
id
employee_id
location_id
Todo:左計數加入(包括零)
期望的結果
location.city count
NYC 10
SFO 5
CHI 0
原始查詢:
select location.id, count(work.id) as count
from location
left join work
on location.id = work.location_id
group by location.id
SQLAlchemy的:
db_session.query(Location, func.count.work_id).label('count')). \
filter(location.id == work.location_id). \
group_by(location._id). \
在進行左連接時,在select中指定列的正確方法是什么?
定義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中的所有列,因此您還必須傳遞Location中的所有列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.