gpt4 book ai didi

python - SqlAlchemy 左连接计数

转载 作者:太空狗 更新时间:2023-10-29 20:21:58 25 4
gpt4 key购买 nike

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 模型时定义表之间的关系。参见 this tutorial .在您的示例中,Work 是一个关联表,因此如果您在Work 中没有任何其他数据,您可以使用 many to many relationship例如:

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 中的所有列。

关于python - SqlAlchemy 左连接计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9477937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com