栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django 数据库的深入查询(十三)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django 数据库的深入查询(十三)

Django 数据库的深入查询
    • 9.6 数据库查询(重点)

9.6 数据库查询(重点)
  • ORM 的两种查询方式

    • 原生 sql 的查询方法

      User.object.raw(‘select * from user where id=1’)

    • 基于 ORM 方法查询

      Usertest.objects.filter(id=1)

  • 基于 ORM 的常用查询方法

方法名描述
User.objects.all()返回 user 表中的所有数据
User.objects.get(**filter)返回满足条件的数据(单条,没有数据则抛出异常)
User.objects.filter(**filter)返回满足条件的数据(多条, 没有数据则返回空数据)
User.objects.all()/filter().exists()返回是否有对象 True False
User.objects.all()/filter().count()返回获取到对象的数量
User.objects.all()/filter().exclude(**filter)**返回的数据库中排除满足 filter 的
User.objects.filter().distinct(‘age’)返回的对象中通过某个列去重
User.objects.filter().order_by(‘age’)返回对象中通过 age 排序
dir(User.objects)查询其他方法
  • 深入查询
属性名描述举例
__exact类似于 sql 中的 like 精确查找name__exact=‘小钟’
__iexact精确查找且忽略大小写name__iexact=‘小钟AbC’
__contains类似于 ‘like %小钟% ’ 模糊查找name__contains=‘小钟’
__icontains模糊查找且忽略大小写name__icontains=‘小钟’
__gt大于age__gt=18
__gte大于等于age__gte=18
__lt小于age__lt=18
__lte小于等于age__lte=18
__isnull是否为空name__isnull=True
__startswith以什么开头name__startswith=‘小’
__istartswith以什么开头且忽略大小写name__istartswith=‘小AbC’
__endswith以什么结尾name__endswith=‘钟’
__iendswitch以什么结尾且忽略大小写name__iendswith=“bC钟”
__in查询在标准的那个数据name__in=[‘小钟’, ‘小红’]
  • 或查询
from django.db import Q

# 查询满足条件其一的数据 类似于  where username='小钟' or username='小红'
user = User.object.filter(Q(username='小钟') | Q(username='小红'))

  • 聚合查询(aggregate)
方法名描述举例
Avg平均值User.object.all().aggregate(Avg=‘age’)
Sum取和User.object.all().aggregate(Sum=‘age’)
Max最大值User.object.all().aggregate(Max=‘age’)
Min最小值User.object.all().aggregate(Min=‘age’)
Count计数User.object.all().aggregate(Count=‘age’)
  • 多表查询之反向查询
当在 user 表中和 diary 表之间有所关联的时候,通过 user 模型借助 diary 关联的条件进行查找 user 的时候,我们称之为反向查询

查找在 diary 表中 id 为 2 的这个对应的 user


user = useryobjects.filter(diary__id=2)

  • 多表查询值查询关联信息
通过主对象选择需要查找的表对应的 related_name ,通过 value 查询具体信息

user = user.objects.get(pk=1)   

user.diary.values('content ')      # 返回 id 为1的用户的 diary 的 content 信息 

user.diary.count()			# 返回id为1的用户的diary关联数量

补充: user.diary 其实就是 Diary 模型,我们可以通过它再去调用更多方法,比如 get filter 再去扩展查询

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/935669.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号