相对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去哪了?
答案 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)