首页 > 数据库 >sqlalchemy 递归查询

sqlalchemy 递归查询

时间:2024-07-15 10:07:25浏览次数:11  
标签:aa sqlalchemy 递归 title nature 查询 query Organization id

背景: 有个一个组织机构. 并没有设计父级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

标签:aa,sqlalchemy,递归,title,nature,查询,query,Organization,id
From: https://www.cnblogs.com/gatling/p/18302570

相关文章

  • sqlalchemy pandas转化字典转为orm写入到sqlite数据库报错类型错误的解决办法
    使用pandas读取csv数据,然后将其转化为字典,再写入到数据库的时候,数据库总是报错类型错误,于是转为orm之前,统一转化一下类型fromsqlalchemyimportDECIMAL,Index,String,Date,Integer,Text,CHAR,SmallInteger,Float,Time,case,and_,extract,TypeDecoratorfrom......
  • 教你创建Python函数信手拈来哦(递归函数)
    Python中函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段函数能提高应用的模块性,和代码的重复利用率Python提供了许多内建函数,比如print()、type()、类型转换函数等等用户也可以自己创建函数,这被叫做用户自定义函数一、定义函数1.创建函数函数使用def关键......
  • 构建与查询并行:Kylin Cube构建时的查询能力解析
    构建与查询并行:KylinCube构建时的查询能力解析ApacheKylin作为领先的大数据分析平台,其核心优势之一就是快速的查询响应能力,这得益于其独特的数据立方体(Cube)技术。Cube是预先计算和存储的多维数据集,能够极大加速查询过程。本文将深入探讨一个关键问题:在Kylin的Cube构建过......
  • 时序数据从通用数据库切换到influxdb后,在查询、分析方面能获取哪些便利?
    数据抽稀如传感器5s上报一次数据,某些场景下,为了性能考虑,需要20s或者5min返回一个pointselectlast(mileage)fromdevice_data_oldwheredeviceId='00130846142'andtime>now()-60mgroupbytime(5m);注意:03:40取的是03:44:55时间点的值。即time返回的是滚动窗口的开......
  • 数据库的基本查询语法:
    一.数据库的基本数据类型:int    整数类型double 小数类型decimal 指定整数与小数长度的小数类型范围在-99.99-99.99date    日期类型格式为:yyyy-MM-dd包含年月日不包含分秒datetime 日期类型格式:YYYY-MM-DDHH:MM:SS,包含年月日包含时分秒timestam......
  • MySQL优化SQL查询语句的策略与实践
    在数据库管理和优化中,针对MySQL的SQL查询优化是提升性能的关键步骤。以下是一些实践性强且高效的策略,旨在减少查询时间,提高系统响应速度:1.精准索引策略,减少全表扫描索引优化:确保在WHERE和ORDERBY子句中涉及的列上创建索引。这不仅加快了数据检索速度,还降低了服务器负担。替......
  • 分页查询及其拓展应用案例
    分页查询分页查询是处理大量数据时常用的技术,通过分页可以将数据分成多个小部分,方便用户逐页查看。SQLAlchemy提供了简单易用的方法来实现分页查询。本篇我们也会在最终实现这样的分页效果:1.什么是分页查询分页查询是将查询结果按照一定数量分成多页展示,每页显示固定数量的......
  • SQLAlchemy 异步操作
    在现代的Python应用中,异步操作越来越受到重视,特别是在处理I/O密集型任务时。SQLAlchemy也提供了对异步操作的支持,结合aiomysql可以实现异步的数据库操作。环境准备首先,你需要安装aiomysql:pipinstallaiomysql步骤详解1.创建数据库驱动引擎我们需要创建一个异步的......
  • SQLAlchemy 执行原生 SQL 语句
    在使用SQLAlchemy进行数据库操作时,虽然ORM提供了强大的模型映射功能,但有时候直接使用原生SQL语句可能更加简单直率,甚至性能更优。下面我们来看一下如何在SQLAlchemy中执行原生的SQL语句。执行原生SQL语句的步骤构造SQL语句调用session中的execute方法执行,得......
  • 【Python123题库】#查询省会 #字典的属性、方法与应用
    禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/140081665参考教程:B站视频讲解——https://space.bilibili.com/3546616042621301有帮助麻烦点个赞~~Python123题库查询省会字典的属性、方法与应用查询省会类型:字典‪‬‪‬‪‬‪‬‪‬‮‬‪‬......