Вот мой фрагмент кода 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.
Я нашел аналогичный вопрос по адресу Как я могу запретить sqlalchemy добавлять префикс к именам столбцов CTE?