在使用 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()

代码解析:

  1. 使用 filter 方法查询满足条件的父任务,并获取父任务的 ID 列表。
  2. 使用 exists 子查询来过滤子任务,只保留父任务 ID 不在父任务 ID 列表中的任务。
  3. 使用 filter 方法将过滤后的任务查询出来。

注意:

  • 该示例假设你已在 Flask 中正确配置 SQLAlchemy,并导入了相关的模块和类。
  • condition 是你定义的父任务满足的条件。

通过使用 exists 子查询,你可以有效地过滤掉子任务,确保查询结果只包含符合条件的父任务。这可以提高查询效率,并避免重复结果。

Flask SQLAlchemy 查询父子关系:过滤子任务避免重复

原文地址: https://www.cveoy.top/t/topic/pguy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录