SQLlalchemy:选择引用别名表名的列



我对使用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, ...)))

最新更新