10.ORM操作
ORM操作
- 基本查询
# 单一查询 如果结果不存在报错
queryset = User.objects.filter(username="张三")
# 查询全部
queryset = User.objects.all()
# 查询数量的结果(结果是数字) 不需要序列化 直接return
queryset = User.objects.filter(username="张三").count()
# 查询结果取反
queryset = User.objects.exclude(username="张三")
-
模糊查询
-
contains 是否包含
# 查询结果包含‘张’ queryset = User.objects.filter(username__contains="张") -
startswith,endswith 以指定值开头或结尾
# 查询以‘李’字开头的数据 queryset = User.objects.filter(username__startswith="李") # 查询以四结尾的数据 queryset = User.objects.filter(username__endswith="四")
-
-
- isnull 是否为空
# 查询home不为空
queryset = User.objects.filter(home__isnull=False)
- 范围查询
- in 在范围内
- renge 相当于between...and...
# 查询id为1或2或5的数据
queryset = User.objects.filter(id__in=[1,2,5])
# 查询范围为1-5的 id
queryset = User.objects.filter(id__range=[1,5])
- 比较查询
- gt 大于
- gte 大于等于
- lt 小于
- lte 小于等于
- exclude 不等于
# 查询id大于2的(gt是大于)
queryset = User.objects.filter(id__gt=2)
# 查询id不等于2的(exclude是不等于)
queryset = User.objects.exclude(id=2)
-
F对象和Q对象
-
⽐较两个字段对象之间的关系⽤F对象。(F对象可以进⾏运算)
# 查询id大于等于2的(gte是大于等于) queryset = User.objects.filter(id__gte=2) # 查询年龄大于等于身高的对象 queryset = User.objects.filter(age__gte=F('hight')) -
与逻辑运算符连⽤使⽤Q对象。 或( | ) 与( & ) ⾮( ~ )
# 查询年龄大于等于20或者id小于5的对象 queryset = User.objects.filter(Q(age__gte=20)|Q(id__lt=5))
-
-
聚合函数
使⽤aggregate()过滤器调⽤聚合函数。聚合函数包括:Avg 平均,Count 数量,Max 最⼤, Min 最⼩,Sum 求和
# 求年龄的和(结果是数字 直接return) queryset = User.objects.aggregate(Sum('age')) -
排序
使⽤order_by对结果进⾏排序
# 按年龄的升序排序 queryset = User.objects.all().order_by('age') # 按年龄的降序排序 queryset = User.objects.all().order_by('-age') -
多对多操作
-
增加
class ManyToManyTest(APIView): def post(self,request): # 正向添加 # user_name = request.data.get('username') # role_name = request.data.get('role_name') # userobj = models.User.objects.filter(username=user_name).first() # roleobj = models.Role.objects.filter(role_name=role_name).first() # userobj.roles.add(roleobj) # return Response({'code':200,'msg':'成功'}) # 反向添加 user_name = request.data.get('user_name') role_name = request.data.get('role_name') userobj = models.User.objects.filter(username=user_name).first() roleobj = models.Role.objects.filter(role_name=role_name).first() roleobj.user_set.add(userobj) return Response({'code': 200, 'msg': '成功'}) -
删除
class ManyToManyTest(APIView): def delete(self,request): # 在建立manytomany的models里删除数据 # userobj = models.User.objects.filter(id=1).first() # roleobj = models.Role.objects.filter(id=1).first() # obj = userobj.roles.remove(roleobj) # print(obj) # return Response('200') # 在建立manytomany的models里删除数据 userobj = models.User.objects.filter(id=2).first() roleobj = models.Role.objects.filter(id=1).first() obj = roleobj.user_set.remove(userobj) print(obj) return Response('200') -
修改
class ManyToManyTest(APIView): def put(self,request): # 在未建立manytomany的models里修改数据,参数只能是可迭代对象 # userobj = models.User.objects.filter(id=3) # roleobj = models.Role.objects.filter(id=2).first() # obj = roleobj.user_set.set(userobj) # print(obj) # return Response("200") # 在未建立manytomany的models里修改数据,参数只能是可迭代对象 userobj = models.User.objects.filter(id=1).first() roleobj = models.Role.objects.filter(id=1) obj = userobj.roles.set(roleobj) print(obj) return Response('200') -
查看
class ManyToManyTest(APIView): def get(self,request): # 正向查询 # userobj = models.User.objects.get(id=2) # roleobj = userobj.roles.all() # obj = RoleSer(roleobj,many=True) # return Response(obj.data) # 反向查询 role_obj = models.Role.objects.get(id=2) userobj = role_obj.user_set.all() obj = UserSer(userobj,many=True) return Response(obj.data)
-

浙公网安备 33010602011771号