将 DataFrame 联合到 sqlalchemy 查询

问题描述 投票:0回答:0

我有一个包含大约 1000 行的数据框。我想将它与我构建的 sqlalchemy 查询联合起来,该查询包含与数据框相同的列,但派生自多个表。

我尝试了一些方法,但大多数方法都不起作用或非常慢。

    # external_data = external_data[required_cols].values.tolist()
    # select_statements = []
    # for row in external_data:
    #     # ref: https://docs.sqlalchemy.org/en/13/changelog/migration_11.html
    #     # ref: https://github.com/sqlalchemy/sqlalchemy/issues/2528
    #     select_statements.append(
    #     [
    #         literal(value) if col in external_data_cols else null()
    #         for value, col in zip(row, required_cols)
    #     ]
    # )

然后我使用这些选择语句与主查询结合。

    union_subquery = query.union_all(*select_statements).subquery()
    all_cols = [union_subquery.c[col].label(col) for col in required_cols]
    query = db.session.query(union_subquery).with_entities(*all_cols)

对于大约 500 行和 100 列,这变得非常慢。

此外,不同的数据库对复合选择中的术语数量有限制。这使得该解决方案难以针对大量数据(来自数据框的 1000 - 10000 个外部行)实施。

我尝试了另一种将数据框转换为临时表的方法,但不确定如何创建 通过使用查询中的详细信息(例如查询中的列的名称和类型)来创建临时表,包括派生列和实际数据库列。

我想实现一些可以在数据库中工作的东西,比如 oracle、mysql、mssql

有人可以对此提出建议吗?

我厌倦了上面提到的事情,但它没有用。

sqlite select sqlalchemy union union-all
© www.soinside.com 2019 - 2024. All rights reserved.