2010-03-31 74 views
2

http://en.wikipedia.org/wiki/Relational_algebra#Semijoin如何使用SQLAlchemy进行半连接?

比方说,我有两个表: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的行。我确信这很容易做到,但一个例子会很好如果有人能告诉我。

回答

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') 
+0

“B”的逻辑比我给出的例子稍微复杂一些,并且将在其他部分中使用。但是,我认为这让我了解如何做这件事情。 – 2010-04-01 14:03:44