sqlalchemy 递归查询
背景: 有个一个组织机构. 并没有设计父级id, 只有id, title, nature 三个字段, nature=1/2/3/4 分别表示级几级单位;
现在要模糊查询本级, 上级, 上上级, 上上上级的title中包含 特定字符的记录;使用sqlalchemy递归查询,下面代码没调试,不保证运行, 主要看思路;
def find_orgs_with_aa(session: Session):
    # 使用递归CTE查询,首先定义CTE的基本查询和递归部分
    cte_query = (
        session.query(
            Organization.id,
            Organization.title,
            Organization.nature,
            func.cast(None, Integer).label('parent_id')  # 初始化没有父级ID
        )
        .filter(Organization.title.contains('aa'), Organization.nature == 1)  # 找到所有一级机构包含aa的
    
        .union_all(
            # 递归部分,查找所有上级机构(nature较小的)
            session.query(
                Organization.id,
                Organization.title,
                Organization.nature,
                Organization.id.label('parent_id')  # 使用当前机构的ID作为父级ID
            )
            .join(Organization, Organization.id == Organization.parent_id)  # 自连接,找到上级
            .filter(Organization.title.contains('aa'))  # 上级机构标题也需包含aa
        )
    ).cte(name='recursive_cte', recursive=True)
    # 最终查询,从CTE中选择所有需要的记录
    final_query = session.query(Organization).select_from(cte_query).subquery()
    result = session.query(final_query).all()
    return result
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号