小编Ame*_*S M的帖子

SQLAlchemy:以3个表的union_all子查询为前缀的列名

这是我的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)

python sql sqlalchemy flask-sqlalchemy

5
推荐指数
1
解决办法
961
查看次数

SQLAlchemy:union_all上的列名

这是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)

浏览了sqlalchemy doc

在这里找到类似的问题

python sqlalchemy

4
推荐指数
1
解决办法
3043
查看次数

标签 统计

python ×2

sqlalchemy ×2

flask-sqlalchemy ×1

sql ×1