2014-10-01 39 views
18

執行「左外連接」我要執行這個查詢::如何在SQLAlchemy的

select field11, field12 
from Table_1 t1 
left outer join Table_2 t2 ON t2.tbl1_id = t1.tbl1_id 
where t2.tbl2_id is null 

我有這些類在Python:

class Table1(Base): 
    .... 

class Table2(Base): 
    table_id = Column(
     Integer, 
     ForeignKey('Table1.id', ondelete='CASCADE'), 
    ) 
    .... 

如何獲得上述從下面?

回答

26
q = session.query(Table1.field1, Table1.field2)\ 
    .outerjoin(Table2)\ # use in case you have relationship defined 
    # .outerjoin(Table2, Table1.id == Table2.table_id)\ # use if you do not have relationship defined 
    .filter(Table2.tbl2_id == None) 

應該這樣做,假設field1field2來自Table1,而您定義的關係:

class Table2(Base): 
    # ... 
    table1 = relationship(Table1, backref="table2s") 
+1

如果Table1和Table2是相同的表,有沒有辦法做到這一點? – avyfain 2015-09-01 18:01:39

+1

當然可以。閱讀文檔的[使用別名](http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html#using-aliases)部分。 – van 2015-09-01 18:43:53

2

您也可以做到這一點使用SQLAlchemy的核心只有:

session.execute(
    select(['field11', 'field12']) 
    .select_from(
     Table1.join(Table2, Table1.tbl1_id == Table2.tbl1_id, isouter=True)) 
    .where(Table2.tbl2_id.is_(None)) 
)