这是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)
but
我如何从 q3 获取 column_name_1 ?我该怎么做?
q3.column_name_1 == '1234'
经历了sqlalchemy 文档 http://docs.sqlalchemy.org/en/rel_0_9/
发现类似的问题被问到here https://stackoverflow.com/questions/21777730/sort-by-a-column-in-a-union-query-in-sqlalchemy-sqlite
下面的代码应该可以做到。几点注意事项:
- 指定一个
label
对于一列,否则sqlalchemy
会创造自己独特的名字
- use sqlalchemy.sql.expression.union_all http://docs.sqlalchemy.org/en/rel_0_9/core/selectable.html#sqlalchemy.sql.expression.union_all,这将产生
Selectable
而不是一个Query
Code:
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')
根据您的示例,您实际上可以将过滤器直接添加到原始查询中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)