【问题标题】:Why does my SQL Alchemy (CORE) join object lose its join condition when queried为什么我的 SQL Alchemy (CORE) 连接对象在查询时会丢失其连接条件
【发布时间】:2019-01-20 15:28:04
【问题描述】:

Relative SQL Alchemy 新手在这里。我创建了一个外连接对象,然后在选择查询中使用它。创建查询时,连接条件消失,产生笛卡尔积。

创建连接:

data_set = join(db.client, db.employee, isouter=True)

调试器将连接对象的值显示为:

data_set = 客户 LEFT OUTER JOIN 员工 ONemployee.id = client.account_manager_id

查询加入:

qry = select([data_set.c.client_id.label('ID'), data_set.c.client_contract_client_name.label('CONTRACT CLIENT'),
                  data_set.c.client_project_client_name.label('PROJECT CLIENT'),
                  data_set.c.client_ins_dt.label('INSERT'), data_set.c.client_update_dt.label('UPDATE'),
                  (data_set.c.employee_last_name + data_set.c.employee_first_name).label('ACCT MGR')]).\
        order_by(data_set.c.client_contract_client_name)

调试器显示qry的SQL为:

SELECT client.id AS "ID", client.contract_client_name AS "CONTRACT 客户”,client.project_client_name 作为“项目客户”,client.ins_dt 作为“插入”,client.update_dt 作为“更新”,员工.last_name || employee.first_name AS “ACCT MGR” 来自客户、员工 ORDER BY client.contract_client_name

注意 FROM 子句。我的 JOIN 去哪儿了?

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    我刚刚想通了!我需要使用 select 命令的 select_from() 方法。我的新(正常运行)查询如下所示...

    qry = select([data_set.c.client_id.label('ID'), data_set.c.client_contract_client_name.label('CONTRACT CLIENT'),
                      data_set.c.client_project_client_name.label('PROJECT CLIENT'),
                      data_set.c.client_ins_dt.label('INSERT'), data_set.c.client_update_dt.label('UPDATE'),
                      (data_set.c.employee_last_name + data_set.c.employee_first_name).label('ACCT MGR')]).\
            select_from(data_set).\
            order_by(data_set.c.client_contract_client_name)
    

    注意倒数第二行 - select_from(data_set)

    【讨论】:

      猜你喜欢
      • 2013-07-03
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 2020-03-25
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      相关资源
      最近更新 更多