将 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语句似乎根本没有任何作用。
您需要
.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,
),
)
)