使用 SQL 和 Sqlalchemy 查询的表具有相同的列名

Posted

技术标签:

【中文标题】使用 SQL 和 Sqlalchemy 查询的表具有相同的列名【英文标题】:Tables being queried with SQL and Sqlalchemy have same column names 【发布时间】:2020-08-02 08:21:53 【问题描述】:

我正在使用 sqlalchemy 和 SQL 查询代码查询 mysql 数据库中的各种不同的表。

我现在的问题是重命名一些正在加入的列。查询都进入一个数据框。

SELECT *
FROM original

LEFT JOIN table1 
    on original.id = table1.t1key

LEFT JOIN table2 
    on original.id = table2.t2key

LEFT JOIN table3
    on original.id = table3.t3key;

我真正想从这些表中得到的只是添加到我的查询中的单个列。每个表都有一个同名的列。我使用别名的方法如下,

table1.columnchange AS 'table1columnchange'
table2.columnchange AS 'table2columnchange'
table3.columnchange AS 'table3columnchange'

但我尝试实现这一点的各种方法最终都会出现烦人的错误。

我也在查询大约 20 个不同的表,所以在开始时使用SELECT * 是为了方便起见而效率低下的理想选择。

我正在寻找的输出是一个数据框,其中包含我需要的每一列(然后我试图对其进行过滤并使用 python 构建建模)。我可以通过 sqlalchemy 将查询管理到 pandas 中,别名是现在让我感到悲伤的原因。

提前致谢

【问题讨论】:

【参考方案1】:

您可以使用嵌套查询:

SELECT
 original.column1 as somename,
 table1.column1 as somename1,
 table2.column1 as somename2
FROM
 (SELECT
    column1
 FROM
    original
 ) original
 LEFT JOIN (
    SELECT 
        column1
    FROM
        table1
 ) table1 ON original.id = table1.t1key
 LEFT JOIN (
    SELECT 
        column1
    FROM
        table2
 ) table2 ON original.id = table2.t2key

【讨论】:

实际上,我使用选择功能的顶部,因为我可以在制作 aias 的同时还使用 * 选择所有。我相信带有括号数据的左连接是破坏它的原因。

以上是关于使用 SQL 和 Sqlalchemy 查询的表具有相同的列名的主要内容,如果未能解决你的问题,请参考以下文章

如何编写带有联接和聚合的 SQLAlchemy 查询?

如何从 SQLAlchemy ORM 会话中查询预先存在的表?

sqlAlchemy语法增删改查

python SQLAlchemy

SQLAlchemy 仅从连接表中选择列

sqlalchemy:查询数据库中的现有表