Flask SQLAlchemy 查询父子关系:过滤子任务避免重复
在使用 Flask 和 SQLAlchemy 处理单表父子关系时,有时需要查询父任务,但同时需要避免查询结果包含子任务。本文介绍如何使用 exists 子查询来实现这一功能。
示例代码:
from sqlalchemy import exists
# 查询父满足条件的任务
parent_tasks = db.session.query(SysTask).filter(condition).all()
# 获取父任务的id列表
parent_ids = [task.id for task in parent_tasks]
# 使用exists子查询来过滤子任务
subquery = db.session.query(SysTask).filter(SysTask.parent_id.in_(parent_ids)).exists()
filtered_tasks = db.session.query(SysTask).filter(~subquery).all()
代码解析:
- 使用
filter方法查询满足条件的父任务,并获取父任务的 ID 列表。 - 使用
exists子查询来过滤子任务,只保留父任务 ID 不在父任务 ID 列表中的任务。 - 使用
filter方法将过滤后的任务查询出来。
注意:
- 该示例假设你已在 Flask 中正确配置 SQLAlchemy,并导入了相关的模块和类。
condition是你定义的父任务满足的条件。
通过使用 exists 子查询,你可以有效地过滤掉子任务,确保查询结果只包含符合条件的父任务。这可以提高查询效率,并避免重复结果。
原文地址: https://www.cveoy.top/t/topic/pguy 著作权归作者所有。请勿转载和采集!