如何使用SQLAlchemy进行半连接?

时间:2010-03-31 15:15:36

标签: python sql orm sqlalchemy

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返回行。我确信这很容易做,但是一个例子会很好如果有人能告诉我。

1 个答案:

答案 0 :(得分:2)

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

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

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

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