我使用sqlalchemy相当新,并且在生成我正在寻找的sql代码时遇到了一些问题。
最后,我尝试使用以下SQL查询将 table2 的两个不同子集连接到 table1 :
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 :(得分: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, ...)))