首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SqlAlchemy中执行“左外连接”

如何在SqlAlchemy中执行“左外连接”
EN

Stack Overflow用户
提问于 2014-10-01 21:15:51
回答 2查看 77.6K关注 0票数 54

我需要执行以下查询::

代码语言:javascript
复制
select field11, field12
from Table_1 t1
left outer join Table_2 t2 ON t2.tbl1_id = t1.tbl1_id
where t2.tbl2_id is null

我用python编写了这些类:

代码语言:javascript
复制
class Table1(Base):
   ....

class Table2(Base):
   table_id =  Column(
        Integer,
        ForeignKey('Table1.id', ondelete='CASCADE'),
    )
    ....

我如何从下面到达上面的内容?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-01 23:04:15

代码语言:javascript
复制
q = session.query(Table1.field1, Table1.field2)\
    .outerjoin(Table2)\ # use in case you have relationship defined
    # .outerjoin(Table2, Table1.id == Table2.table_id)\ # use if you do not have relationship defined
    .filter(Table2.tbl2_id == None)

应该这样做,假设field1field2来自Table1,并且您定义了一个关系:

代码语言:javascript
复制
class Table2(Base):
    # ...
    table1 = relationship(Table1, backref="table2s")
票数 88
EN

Stack Overflow用户

发布于 2017-09-07 07:24:02

您也可以仅使用SQLAlchemy核心来完成此操作:

代码语言:javascript
复制
session.execute(
    select(['field11', 'field12'])
    .select_from(
        Table1.outerjoin(Table2, Table1.tbl1_id == Table2.tbl1_id))
    .where(Table2.tbl2_id.is_(None))
)

PS .outerjoin(table, condition)等同于.join(table, condition, isouter=True)

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26142304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档