![](/img/trans.png)
[英]SQLAlchemy : column name prefixed on the subquery of union_all of 3 tables
[英]SQLAlchemy : Column name on 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'
我想在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文档
在这里发现了类似的问题
下面的代码应该做到这一点。 几点注意事项:
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')
在您的示例中,您实际上可以将过滤器直接添加到原始查询中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.