SQLAlchemy:union_all上的列名

时间:2014-10-08 06:22:40

标签: python sqlalchemy

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

1 个答案:

答案 0 :(得分:5)

下面的代码应该这样做。几个笔记:

代码:

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')

根据您的示例,您可以将过滤器直接添加到原始查询中。