gpt4 book ai didi

python - sqlalchemy - 用 2 个条件连接子表

转载 作者:行者123 更新时间:2023-12-02 03:15:38 25 4
gpt4 key购买 nike

当连接 2 个表时,如何向 ON 子句添加 2 个条件。我在层次结构中有 3 个三表,每个表都有已删除标志。我必须将所有这些表连接到一个查询中,并根据已删除标志进行过滤。目前,条件被添加到查询的where子句中,这不会过滤已删除的记录。需要将其添加到 ON 子句中。请提出建议。

我当前的查询如下:

result = session.query(Host).filter(and_(Host.id.in_(ids), Host.deleted == False)).\
join(Switch).filter(Switch.deleted == False).\
join(Port).filter(Port.deleted == False).\
options(joinedload('switches')).\
options(joinedload('ports')).\
all()

谢谢

最佳答案

尝试 contains_eager 而不是 joinload。可能发生的情况是,您有 4 个连接,其中两个连接是您使用 join 定义的,然后是选项中的两个连接(joinedload(...))

修改你的代码,应该给出:

from sqlalchemy import and_

result = (session.query(Host).filter(and_(Host.id.in_(ids), Host.deleted == False)).
join(Switch, and_(Switch.host_id==Host.id, Switch.deleted == False)).
join(Port, and_(Port.switch_id==Switch.id, Port.deleted == False)).
options(contains_eager('switches')).
options(contains_eager('ports')).
all()
)

关于python - sqlalchemy - 用 2 个条件连接子表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11144536/

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