这是我的mssql代码片段
cnt = func.count(pvr_svc.ic_idn).label('cnt')
x = session.query(pvr_svc.inc_type_md, cnt, cast(pvr_svc.crt_dt,DATE)
.label('crt_dt'))
.filter(pvr_svc.inc_type_md.in_(['PM','OM','OP-HU']))
.group_by(cast(pvr_svc.crt_dt, DATE), pvr_svc.inc_type_md)
y = session.query(pvr_svc.inc_type_md, cnt, cast(pvr_svc.crt_dt,DATE)
.label('crt_dt'))
.filter(pvr_svc.gold_idn==2)
.group_by(cast(pvr_svc.crt_dt, DATE), pvr_svc.inc_type_md)
Run Code Online (Sandbox Code Playgroud)
这就是我想要做的
from sqlalchemy import union_all
u1 = x.union_all(y) # ----- 1
Run Code Online (Sandbox Code Playgroud)
"u1"中的列名提取如下
>>>[i['name'] for i in u1.column_descriptions]
>>>['inc_type_md', 'cnt', 'crt_dt'] # column names
Run Code Online (Sandbox Code Playgroud)
现在如果我想在将来使用'u1'这就是我的工作
>>>v1 = u1.subquery() #------ 2
Run Code Online (Sandbox Code Playgroud)
要从"v1"访问列名,我这样做
>>>v1.c.keys()
>>>[u'pvr_svc_inc_type_md', u'cnt', u'crt_dt']
Run Code Online (Sandbox Code Playgroud)
现在,如果你看到'u1'中的第一个键和'v1'(它是u1的子查询)是不同的.我期待它们是一样的.
为了避免这种情况,我会在"x"和"y"查询中标记列名
x = session.query(pvr_svc.inc_type_md.label('inc_type_md'), cnt, cast(pvr_svc.crt_dt,DATE).label('crt_dt')
.label('crt_dt'))
.filter(pvr_svc.inc_type_md.in_(['PM','OM','OP-HU']))
.group_by(cast(pvr_svc.crt_dt, DATE), pvr_svc.inc_type_md)
y = session.query(pvr_svc.inc_type_md.label('inc_type_md'), cnt, cast(pvr_svc.crt_dt,DATE).label('crt_dt')
.label('crt_dt'))
.filter(pvr_svc.gold_idn==2)
.group_by(cast(pvr_svc.crt_dt, DATE), pvr_svc.inc_type_md) …Run Code Online (Sandbox Code Playgroud) 这是mssql代码片段
(Select column_name_1 from table_name_1 with(nolock) Where column_name_2='Y'
UNION ALL
Select column_name_1 from table_name_2 with(nolock) Where column_name_2='Y'
)ae ON ae.column_name_1 = '1234'
Run Code Online (Sandbox Code Playgroud)
我想在sqlalchemy中实现这个,这就是我如何接近它
q1 = session.query(table_name_1.column_name_1).filter(table_name_1.column_name_2=='Y')
q2 = session.query(table_name_2.column_name_1).filter(table_name_2.column_name_2=='Y')
q3 = q1.union_all(q2)
Run Code Online (Sandbox Code Playgroud)
但
我如何从q3获得column_name_1.我该怎么办?
q3.column_name_1 == '1234'
Run Code Online (Sandbox Code Playgroud)
在这里找到类似的问题