2014-10-01 21 views
18

yılında "sol dış birleşim" yürütmek için nasıl bu sorguyu ::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 bu sınıflar vardı yürütmek gerekiyor aşağıda?

cevap

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) 

field1 ve field2Table1 gelmektedir varsayarak bunu yapması gerektiğini ve bir ilişki tanımlamak o:

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

Tablo1 ve Tablo 2 aynı tablolar ise bunu yapabileceğiniz bir yolu var mı? – avyfain

+1

Elbette yapabilirsin. Belgelerin [Diğer Adları Kullanma] (http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html#using-aliases) bölümünü okuyun. – van

2

de yapabilirsiniz o SQLAlchemy Çekirdek sadece kullanılarak:

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