如何将 SQL Alchemy ORM 查询对象与另一个查询或表连接?

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

将 SQL Alchemy ORM 与 Athena 数据库(PyAthena 引擎)结合使用。我似乎无法根据一列将查询对象与另一个表对象连接起来。这是

Query
对象和
Table
对象的架构。

对于查询对象的每一行,我需要找到对应的zone。在 SQL 中,这看起来像

WITH query AS (-- The query defined 
)
SELECT start_dt, zone FROM query INNER JOIN addresses 

WHERE query.start_address_ref=addresses.address_ref;

这就是我在正确形成

query
对象后在 SQL alchemy ORM 中尝试的内容。


# I expect newquery to contain columns from the addresses table
newquery=query.join(target=addresses, 
    onclause=trip_table.columns[trip_address]==addresses.columns[address_ref])

但似乎当新查询形成时,它根本不包含

addresses
表中供我查找区域 id 的列。事实上,join语句似乎根本没有任何作用。

join sqlalchemy orm presto
1个回答
0
投票

您需要

.cte()
这是我项目中的示例

from sqlalchemy.sql import Select

sub_query: Select = (
    select(
        TrackingEventDB.entity_id,
        func.min(TrackingEventDB.created_at).label("min_created_at"),
    )
    .where(
        *query_conditions,
    )
    .group_by(
        TrackingEventDB.entity_id,
    )
    .cte("min_dates")
)


q = (
    select(
        TrackingEventDB.company_id,
        TrackingEventDB.aircraft_id,
        TrackingEventDB.event,
        func.count(TrackingEventDB.id).label("count"),
    )
    .select_from(
        TrackingEventDB,
    )
    .join(
        sub_query,
        and_(
            TrackingEventDB.entity_id == min_dates.c.entity_id,
            TrackingEventDB.created_at == min_dates.c.min_created_at,
        ),
    )
)
© www.soinside.com 2019 - 2024. All rights reserved.