如何在SQLALchemy中执行左联接?

2024-04-28 12:40:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个SQL查询,它在几个表上执行一系列左连接:

SELECT
<some attributes>
FROM table1 t1
INNER JOIN table2 t2
      ON attr = 1 AND attr2 = 1
LEFT JOIN table3 t3
    ON t1.Code = t2.Code AND t3.Date_ = t1.Date_
LEFT JOIN tabl4 t4
    ON t4.Code = t1.code AND t4.Date_ = t1.Date_

到目前为止,我已经:

(sa.select([idc.c.Code])
            .select_from(
                t1.join(t2, and_(t1.c.attr == 1, t2.c.attr2 = 1))
                .join(t3, t3.c.Code == t1.c.Code)))

但是我不知道如何使连接成为一个LEFT JOIN


Tags: andsqldateoncodeleftselectattr
2条回答

下面是如何使用isouter:

select_from(db.join(Table1, Table2, isouter=True).join(Table3, isouter=True)) 

isouter=True标志将产生一个与LEFT JOIN相同的LEFT OUTER JOIN

使用您的代码:

(sa.select([idc.c.Code])
        .select_from(
            t1.join(t2, and_(t1.c.attr == 1, t2.c.attr2 = 1))
            .join(t3, t3.c.Code == t1.c.Code, isouter=True)))

声明性示例:

session = scoped_session(sessionmaker())
session.query(Model).join(AnotherModel, AnotherModel.model_id == Model.id, isouter=True)

相关问题 更多 >