sqlachemy core:如何进行内连接和多连接

时间:2016-04-01 01:13:10

标签: python sqlalchemy flask-sqlalchemy

请注意,这是针对核心的,而不是orm。

希望有人可以帮助我解决这两个问题:

1)似乎有outerjoin和普通join,但是如何进行内连接?

2)执行多个连接的语法是什么。我能够做一个连接,但不确定多个连接的语法。

我的第一次加入看起来像这样:

select([...]).select_from(outerjoin(a, b))

但它会为此语法生成一些错误,以执行两个连接:

select([...]).select_from(outerjoin(a, b).select_from(outerjoin(ma, tr))

提前致谢。

1 个答案:

答案 0 :(得分:2)

  1. join默认为INNER JOIN。 outerjoin使用参数join调用isouter=True
  2. 如果我们想要的SQL查询是

    SELECT a.col1, b.col2, c.col3
    FROM a
    LEFT JOIN b ON a.col1 = b.col1
    LEFT JOIN c ON c.col1 = b.col2
    

    然后sqlalchemy-core语句应为:

    select(
        [a.c.col1, b.c.col2, c.c.col3]
    ).select_from(
        a.outerjoin(
            b, a.c.col1 == b.c.col1
        ).outerjoin(
            c, b.c.col2 == c.c.col1
        )
    )
    
    • 如果已定义关系且不含糊,则无需on clause
    • outerjoin函数可以嵌套而不是链接(就像你为简单连接所做的那样),即

      outerjoin(outerjoin(a, b), c)
      

      但我发现这种形式的可读性较差。