这是 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'
我想在 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)
但
我将如何从 q3 中获取 column_name_1。我该怎么做?
q3.column_name_1 == '1234'
经历了sqlalchemy doc
发现类似问题问 here
最佳答案
下面的代码应该可以做到。几点注意事项:
label
对于一列,否则 sqlalchemy
将创建自己的唯一名称 sqlalchemy.sql.expression.union_all
,这将产生 Selectable
而不是 Query
代码:
q1 = session.query(table_name_1.column_name_1.label("column_name_1")).filter(table_name_1.column_name_2=='Y')
q2 = session.query(table_name_2.column_name_1.label("column_name_1")).filter(table_name_2.column_name_2=='Y')
q3 = union_all(q1, q2)
q3 = select([q3.c.column_name_1]).where(q3.c.column_name_1 == '1234')
鉴于您的示例,您实际上可以将过滤器直接添加到原始查询中。
关于python - SQLAlchemy : Column name on union_all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26250394/