我对使用sqlchemmy相当陌生,并且在生成我正在寻找的sql代码时遇到了一些问题。
最终,我尝试使用以下 SQL 查询将 table2 的两个不同子集连接到表 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')])
...
谢谢!
是的,这样做:
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, ...)))