You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLAlchemy 2.0:如何按父类属性查询对应子类对象列表?

解决方案:通过父类属性查询关联的子表对象列表

针对你的需求,这里提供两种优雅的SQLAlchemy 2.0查询方案:

方案一:直接查询子表并关联过滤

直接从FoodItemModel出发,通过JOIN关联父表,根据父类属性过滤,这是性能最优的方式:

from sqlalchemy import select

# 构建查询语句
stmt = select(FoodItemModel).join(FoodCategoryModel).where(FoodCategoryModel.name == 'Fruits')
# 执行查询获取子对象列表
food_items = db.session.scalars(stmt).all()

方案二:先获取父类对象,再通过关系属性获取子对象

利用模型定义的foodItems动态关系,先定位到目标父类,再调用关系的查询方法:

# 方式1:通过name查询父类
category = db.session.query(FoodCategoryModel).filter_by(name='Fruits').first()
# 方式2:如果知道父类ID,用get更高效
# category = db.session.get(FoodCategoryModel, 1)

# 从父类对象获取关联的子对象列表
food_items = category.foodItems.all()

为什么之前的查询返回布尔值?

你之前的语句select(FoodCategoryModel.foodItems),SQLAlchemy会将其解析为检查关联关系是否存在的查询,而非直接查询子表对象,因此返回的是一组布尔值,而非预期的FoodItemModel实例。

内容的提问来源于stack exchange,提问作者FahdS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:01:05