在开发过程中,我们经常会遇到对同一张表进行多次联表查询的需求。比如在查询航线时,我们希望将起飞和降落的机场名称代入结果中。为了实现这一目标,机场名称统一存放在 AirPort 表中。下面,我们将介绍如何通过 SQLAlchemy 实现这一需求。
问题描述
一般情况我们第一时间会想到这么写:
from sqlalchemy import select
async with get_db_session_async() as session:
stmt = (
select(
AirRoute.dep_airport_code,
AirPort.airport_en_name.label('dep_airport_name'),
AirRoute.arr_airport_code,
AirPort.airport_en_name.label('arr_airport_name'),
ResourceSite.site_code,
ResourceSite.site_name,
ResourceSite.flight_code,
)
.join(ResourceSite, AirRoute.resource_site_id == ResourceSite.id, isouter=True)
.join(AirPort, AirRoute.dep_airport_code == AirPort.airport_c