2016-03-11 95 views
0

我是相當新的使用SQLAlchemy的和有一些問題產生,我尋找的SQL代碼。SQLAlchemy的:選擇列指的是一個別名錶名

最後,我想用下面的SQL查詢的加入表2表1兩個不同的子集:

SELECT table1.date, a1.id AS name1_id, a2.id AS name2_id 
FROM table1 
LEFT JOIN table2 as a1 
    ON table1.name1 = table2.label AND table2.lookup_id = 1000 
LEFT JOIN table2 as a2 
    ON table1.name2 = table2.label AND table2.lookup_id = 2000 

這裏是我迄今使用的SQLAlchemy:

q_generate = (
select([table1.c.date, 
     a1.id.label('name1_id'), 
     a2.id.label('name2_id')]) 

.select_from(table1 
    .outerjoin(table2.alias(name='a1'), 
       and_(
        table2.c.lookup_id == 1000, 
        table1.c.name1 == table2.c.label 
        )) 
    .outerjoin(table2.alias(name='a2'), 
       and_(
        table2.c.lookup_id == 2000, 
        table1.c.name2== table2.c.label 
        )) 
    ) 

) 

它產生以下錯誤:

*NameError: name 'a1' is not defined* 

有一種特殊的方式,別名表名必須引用?我在這裏錯過了什麼?我認爲錯誤有事情做與這些線,但我無法弄清楚究竟是如何得到這個工作:

... 
a1.id.label('name1_id'), 
a2.id.label('name2_id')]) 
... 

謝謝!

回答

0

是的,這樣做:

a1 = table2.alias(name='a1') 
a2 = table2.alias(name='a2') 
q_generate = (
    select([table1.c.date, 
      a1.c.id.label('name1_id'), 
      a2.c.id.label('name2_id')]) 
    .select_from(table1.outerjoin(a1, ...).outerjoin(a2, ...)))