【问题标题】:Convert PostgreSQL to SqlAlchemy query将 PostgreSQL 转换为 SqlAlchemy 查询
【发布时间】:2013-05-27 12:06:14
【问题描述】:

我在 PostgreSQL 中有一个简单的查询,我需要将其转换为 SQLAlchemy。

SELECT table1.name,table2.ip,table2.info 
FROM table1 LEFT OUTER JOIN table2 
ON(table1.name=table2.hostname) 
GROUP BY table1.name;

我试过用这个没有成功:

session.query(table1.name
              ,table2.ip
              ,table2.info).distinct().join(table2).group_by(table1.name)

有人可以帮我解决这个问题吗?

提前致谢 伊什瓦尔

【问题讨论】:

    标签: sql postgresql sqlalchemy flask-sqlalchemy


    【解决方案1】:

    以下是使用 Expression API 的方法

    http://docs.sqlalchemy.org/en/latest/core/expression_api.html

    1. 定义你的表格,例如:

      table1 = table('table1',
          column('name', String())
      )
      
      table2 = table('table2',
          column('ip', String()),
          column('info', String()),
          column('hostname', String()),
      )
      
    2. 编写您的查询,例如:

      my_query = select([table1.c.name,
                         table2.c.ip,
                         table2.c.info]
                 ).select_from(
                         table1.outerjoin(table2, table1.c.name == table2.c.hostname)
                 ).group_by(table1.c.name)
      
    3. 执行您的查询,例如:

      db.execute(my_query)
      

    【讨论】:

    • 虽然没有准确回答问题,但我找到了前进的方向。谢谢
    【解决方案2】:

    从您的回答中不清楚问题是什么,但我对这个查询的看法是:

    session.query(table1.name
                 ,table2.ip
                 ,table2.info)\
           .outerjoin(table2)\
           .group_by(table1.name)
    

    【讨论】:

      【解决方案3】:

      我想出了答案。我实际上错过了查询中的 ON 条件:

      session.query(table1.name ,table2.ip ,table2.info ).distinct().outerjoin(table2 , table1.name=table2.hostname ).group_by(table1.name)

      感谢您的帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-25
        • 2018-12-08
        • 1970-01-01
        • 2019-03-20
        • 1970-01-01
        • 2014-04-01
        • 2021-02-03
        • 1970-01-01
        相关资源
        最近更新 更多