Sqlalcemy自关联递归查询性能对比

15 篇文章 0 订阅
11 篇文章 1 订阅

在这里插入图片描述

方式一:

    # 根据部门id获取所有子部门id
    def get_child_department_id(self, department_ids, db):
        t1 = time.time()
        child_department_ids = []
        all_department_list = db.query(DepartmentModel).all()
        department_map_pid_to_ids = {}
        for i in all_department_list:
            if i.parent_id not in department_map_pid_to_ids:
                department_map_pid_to_ids[i.parent_id] = []
            department_map_pid_to_ids[i.parent_id].append(i.id)
        def get_child(department_id):
            if department_id not in department_map_pid_to_ids:
                return
            for d in department_map_pid_to_ids[department_id]:
                child_department_ids.append(d)
                get_child(d)

        for i in department_ids:
            get_child(i)
        data = department_ids + child_department_ids
        t2 = time.time()
        print("时间总计---------",t2-t1)
        return data

调用三次的结果如下:

时间总计--------- 0.0019965171813964844
时间总计--------- 0.0010004043579101562
时间总计--------- 0.0009989738464355469

方式二:

    def get_children_department_ids(self, department_id,department_ids, db):
        t1 = time.time()
        department = db.query(DepartmentModel).filter_by(id=department_id).first()
        if not department:
            return department_ids
        department_ids.append(department_id)
        children = db.query(DepartmentModel).filter_by(parent_id=department_id).all()
        for child in children:
            department_ids = UserService.get_children_department_ids(self, child.id, department_ids, db)
        department_ids = [department_id] + department_ids
        t2 = time.time()
        print("时间总计---------",t2-t1)
        return department_ids

调用三次的结果如下:

时间总计--------- 0.012995481491088867
时间总计--------- 0.014801740646362305
时间总计--------- 0.015512943267822266

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值