SQLAlchemy ORM(PyAthena):Query与Table关联后无法获取关联表字段
SQLAlchemy ORM关联后未包含关联表字段的解决方法
问题根源
SQLAlchemy的join()方法仅负责建立表之间的关联关系,不会自动将关联表的字段追加到查询结果中。你的原query对象只包含初始查询的字段,执行join后若未明确指定要选择的列,结果仍只会返回原查询的字段,这就是关联后看不到addresses表字段的原因。
具体解决方法
方法1:用add_columns()追加关联表字段
如果原query是已构建好的查询对象,直接通过add_columns()添加addresses表需要的字段即可:
# 假设addresses是Table对象,zone是目标字段 newquery = query.join( addresses, onclause=trip_table.columns[trip_address] == addresses.columns[address_ref] ).add_columns(addresses.c.zone)
如果使用ORM模型而非原生Table对象,写法类似:
# 假设QueryModel是原查询对应的ORM模型,Addresses是addresses表的模型 newquery = query.join( Addresses, QueryModel.start_address_ref == Addresses.address_ref ).add_columns(Addresses.zone)
方法2:重新构建查询明确指定所有字段
如果原query是子查询,也可以用select()直接指定需要的字段,并通过select_from()关联子查询和表:
from sqlalchemy import select # 指定需要的字段:原query的start_dt和addresses的zone newquery = select(query.c.start_dt, addresses.c.zone).select_from( query.join(addresses, query.c.start_address_ref == addresses.c.address_ref) )
验证方式
可以通过打印生成的SQL语句确认是否符合预期:
print(str(newquery))
输出的SQL应与你手动编写的WITH子句+包含zone的SELECT语句一致。
内容的提问来源于stack exchange,提问作者Della
相关产品推荐
相关产品推荐

