python - SQLAlchemy : Column name on union_all

标签 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

最佳答案

下面的代码应该可以做到。几点注意事项:

  • 指定一个 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/

    相关文章:

    python - 如何使用 .bat 文件启动 .pyw 脚本而不弹出 cmd?

    python - 如何安全地运行另一个Python文件?

    python - 将列添加到 SQLAlchemy 表

    python - SQLAlchemy 的管理界面?

    python - flask restplus模型

    python - 将 Excel 文件流保存到 azure blob 存储

    python - SQLAlchemy 过滤器 in_ 运算符

    mysql - SQLAlchemy 可以独立于框架单独使用吗?是否推荐这样做?

    python - 通过 SQLAlchemy 在 postgres 中存储序列化数据

    python - 如何为另一个包打包类型 stub ?