• ORM操作


    基本操作

    queryset = User.objects.all()                                   # 查询所有数据
    queryset = User.objects.get(home='郑州')                        # 查询一条数据
    queryset = User.objects.filter(home='郑州').count()             # 查询结果的数量
    queryset = User.objects.exclude(home='郑州')                    # 查询结果取反

    模糊查询

    • contains 是否包含
    queryset = User.objects.filter(home__contains='')         # 查询结果包含’南‘
    • startswith,endswith 以指定的值开头或结尾
    queryset = User.objects.filter(home__startswith='')       # 查询结果以’平‘开头
    queryset = User.objects.filter(home__endswith='')         # 查询结果以’州‘结尾

    空查询

    • isnull 是否为空
    queryset = User.objects.filter(home__isnull=False)          # 查询结果 true为空 false不为空

    范围查询

    • in 在范围内
    queryset = User.objects.filter(id__in=[3,5])            # 查询id 3 或 5
    • range 相当于between...and...
    queryset = User.objects.filter(id__range=[3,5])         # 查询id 3 - 5(范围)

    比较查询

    • gt 大于

    • gte 大于等于

    • lt 小于

    • lte 小于等于

    • exclude 不等于

    queryset = User.objects.filter(id__gt=4)                   # 查询id大于4
    queryset = User.objects.filter(id__gte=4)                  # 查询id大于等于4
    queryset = User.objects.filter(id__lt=4)                   # 查询id小于4
    queryset = User.objects.filter(id__lte=4)                  # 查询id小于等于4
    queryset = User.objects.exclude(id=4)                      # 查询id不等于4

    Q对象

    • 与逻辑运算符连⽤使⽤Q对象。 或( | ) 与( & )  ⾮( ~ )
    queryset = User.objects.filter(Q(id=5) | Q(age=42))        # 查询id等于5 或 age等于42
    queryset = User.objects.filter(Q(id=5) & Q(age=18))        # 查询id等于5 与 age等于42

    聚合函数

    • 使⽤aggregate()过滤器调⽤聚合函数。聚合函数包括:Avg 平均,Count 数量,Max 最⼤, Min 最⼩,Sum 求和
    queryset = User.objects.aggregate(sum('age'))              # 年龄求和

    排序

    • 使用 order_by
    queryset = User.objects.all().order_by('-hight')           # 身高降序
    queryset = User.objects.all().order_by('hight')            # 年龄升序

    多对多

    • 增加
     def post(self,res):
            r_name = res.data.get('r_name')
            u_name = res.data.get('u_name')
            if not all([r_name,u_name]):
                return Response({'code':400,'msg':'参数不完整'})
            # # 正向操作
            # user_obj = User.objects.get(username=u_name)
            # role_obj = Role.objects.get(role_name=r_name)
            # user_obj.roles.add(role_obj)
            # 反向操作
            role_obj=Role.objects.get(role_name=r_name)
            user_obj=User.objects.filter(username=u_name)
            role_obj.user_set.add(*user_obj)
            return Response({'code':200,'data':'添加成功'})
    • 查询
     def get(self,res):
            # 获取
            r_id = res.query_params.get('r_id')
            u_id = res.query_params.get('u_id')
            # 验证
            if not all([r_id,u_id]):
                return Response({'code':400,'msg':'参数不完整'})
            # 逻辑与入库
            # # 正向操作
            # user_obj=User.objects.get(id=u_id)
            # role_obj=user_obj.roles.all()
            # ser_obj=RoleSer(role_obj,many=True)
            # 反向操作
            role_obj=Role.objects.get(id=r_id)
            user_obj=role_obj.user_set.all()
            ser_obj=UserSer(user_obj,many=True)
            # 返回
            data = ser_obj.data
            return Response({'code':200,'data':data})
    • 修改
    def put(self,res):
            r_id = res.data.get('r_id')
            u_id = res.data.get('u_id')
            if not all([r_id,u_id]):
                return Response({'code':400,'msg':'参数不完整'})
            user_obj = User.objects.filter(id=u_id).first()
            role_obj = Role.objects.filter(id=r_id)
            user_obj.roles.set(role_obj)
    
            return Response({'code':200,'data':'修改成功'})
    • 删除
      def delete(self,res):
            r_id = res.GET.get('r_id')
            u_id = res.GET.get('u_id')
            if not all([r_id, u_id]):
                return Response({'code':400,'msg':'参数不完整'})
            user_obj=User.objects.filter(id=u_id).first()
            role_obj=Role.objects.filter(id=r_id).first()
            user_obj.roles.remove(role_obj)
            return Response({'code':200,'data':'删除成功'})
  • 相关阅读:
    非嵌入式数据库 软件很难普及 玩大
    FireMonkey下的异形窗体拖动(需要使用FmxHandleToHwnd函数转化一下句柄)
    公司开到高新技术区可以只收11的企业所得税,拿到软件企业认证后可享受所得税两免三减半(从盈利年度算起)
    猜测:信号槽的本质是使用Windows的自定义消息来实现的
    服务运行、停止流程浅析
    在线压缩JS的工具
    通用流程设计
    并行Linq(一)
    SQL基础知识总结(一)
    Easyui布局
  • 原文地址:https://www.cnblogs.com/GlfLss/p/14031941.html
Copyright © 2020-2023  润新知