Ето моя кодов фрагмент на 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)
и това, което се опитвам да направя, е
from sqlalchemy import union_all
u1 = x.union_all(y) # ----- 1
имената на колоните в "u1" се извличат както следва
>>>[i['name'] for i in u1.column_descriptions]
>>>['inc_type_md', 'cnt', 'crt_dt'] # column names
сега, ако искам да използвам 'u1' в бъдеще, това е, което правя
>>>v1 = u1.subquery() #------ 2
за достъп до имената на колоните от "v1" правя това
>>>v1.c.keys()
>>>[u'pvr_svc_inc_type_md', u'cnt', u'crt_dt']
Сега, ако видите първия ключ в '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)
и повторете стъпки 1 и 2 и работи добре.
Сега проблемът ми е
Искам да направя union_all на "u1" с третата заявка "z", маркирал съм имената на колоните в "z"
z = 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==4)
.group_by(cast(pvr_svc.crt_dt, DATE), pvr_svc.inc_type_md)
Бих направил това, за да направя union_all от 3 заявки
>>>union_xyz = u1.union_all(z)
и сега искам да използвам "union_xyz" в бъдещи заявки, така че създавам подзаявка от това
>>>sub_xyz = union_xyz.subquery()
сега проблемът е, че имената на колоните от sub_xyz имат префикс с някои цели числа
така че, това получавам,
>>>sub_xyz.c.keys()
>>>[u'%(2911061292 anon)s_inc_type_md', u'%(2911061292 anon)s_cnt', u'%(2911061292 anon)s_crt_dt']
Как да избегнем префикса на имената на колоните?
Прегледах sqlalchemy doc
Намерих подобен въпрос на Как мога да попреча на sqlalchemy да префиксира имената на колоните на CTE?