为什么查询时我的SQL Alchemy(CORE)连接对象丢失其连接条件

时间:2019-01-19 21:30:03

标签: python sqlalchemy

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

创建联接:

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

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

  

data_set =客户LEFT OUTER JOIN JOIN员工ON employee.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显示为:

  

选择client.id AS“ ID”,client.contract_client_name AS“ CONTRACT   CLIENT”,client.project_client_name AS“ PROJECT CLIENT”,client.ins_dt   AS“ INSERT”,client.update_dt AS“ UPDATE”,employee.last_name ||   employee.first_name AS“ ACCT MGR”   来自客户,员工ORDER BY   client.contract_client_name

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

1 个答案:

答案 0 :(得分:0)

我刚弄清楚!我需要使用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)