【问题标题】:How do I do a semijoin using SQLAlchemy?如何使用 SQLAlchemy 进行半连接?
【发布时间】:2010-03-31 15:15:36
【问题描述】:

http://en.wikipedia.org/wiki/Relational_algebra#Semijoin

假设我有两个表:A 和 B。我想使用 SQLAlchemy orm 进行类似于以下 SQL 语句的查询:

SELECT A.*
FROM A, B
WHERE A.id = B.id
AND B.type = 'some type';

问题是我试图将 A 和 B 的逻辑分离到不同的地方。所以我想做两个可以在不同位置定义的查询:一个是 A 使用 B 作为子查询,但只返回来自 A 的行。我相信这很容易做到,但举个例子就好了如果有人可以告诉我。

【问题讨论】:

    标签: python sql orm sqlalchemy


    【解决方案1】:

    假设您有模型类 AB 映射到相应的表。

    最简单的情况是A 中的关系指向B,我们将其命名为A.b。然后在查询A 模型时,您只需使用A.b.has(type='some type')A.b.any(type='some type')(取决于A.b 是标量还是表示集合)作为条件。

    但是你说你正在尝试分开登录。这是否意味着没有这种关系?如果是这样,您必须明确定义连接条件:

    session.query(A).join((B, A.id==B.id)).filter(B.type=='some type')
    

    【讨论】:

    • B 的逻辑比我给出的示例要复杂一些,并且会在其他部分使用。但是,我认为这让我知道如何才能完成这项工作。
    猜你喜欢
    • 2013-11-19
    • 2021-02-10
    • 2011-09-08
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2019-10-27
    相关资源
    最近更新 更多