ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 查询函数 通过**模型类.objects**属性可以调用如下函数,实现对模型类对应的数据表的查询 | 函数名 | 功能 | 返回值 | 说明 | | --- | --- | --- | --- | | get | 返回表中满足条件的1条且只能有一条数据 | 返回值是一个模型类对象 | 参数中写查询条件.1如果查到多条数据,则抛异常MultipleObjectsReturned.2查询不到数据,则抛异常DoesNotExist | | all | 返回模型类对应表格中 | 返回值是QuerySet类型 | 查询集 | | filter | 返回满足条件的数据 | 返回值是QuerySet类型 | 参数写查询条件 | | exclude | 返回不满足条件的数据 | 返回值是QuerySet类型 | 参数写查询条件 | | order_by | 对查询结果进行排序 | 返回值是QuerySet类型 | 参数中写根据哪些字段进行排序 | # filter方法 条件格式 ~~~ 模型类属性名__条件名=值 ~~~ **判等,条件名:exact** 例如:查询编号为1的图书 ~~~ BookInfo.objects.get(id=1) BookInfo.objects.get(id__exact=1) ~~~ **模糊查询** 例: 查询书名包含'传'的图书 ~~~ BookInfo.objects.filter(btitle__contains='传') ~~~ 例: 查询书名以"部"结尾的图书 endswith 开头: startswith ~~~ BookInfo.objects.filter(btitle__endswith='部') ~~~ **空查询 isnull** 例: 查询书名不为空的图书 isnull ~~~ BookInfo.objects.filter(btitle__isnull=False) ~~~ **范围查询 in** 查询id为1或3或5的图书 ~~~ BookInfo.objects.filter(id__in = [1,3,5]) ~~~ **比较查询** gt(greate than),lt(less than),gte(equal) ~~~ BookInfo.objects.filter(id__gt=3) ~~~ **日期查询** 查询1980年发表的图书 ~~~ BookInfo.objects.filter(bpub_date_year=1980) ~~~ 查询1980年1月1日后发表的图书 ~~~ from datetime import date BookInfo.objects.filter(bpub_date__gt=date(1980,1,1)) ~~~ **exclude方法** 查询id不为3的图书信息 ~~~ BookInfo.objects.exclude(id=3) ~~~ **order_by方法** 进行查询结果进行排序 id从小到大排序 ~~~ BookInfo.objects.order_by('id') ~~~ id从大到小排序 ~~~ BookInfo.objects.order_by('-id') ~~~ # F对象 用于类属性之间的比较 使用之前需要先导入 ~~~ from django.db.models import F ~~~ 例: 查询图书阅读量大于评论量图书信息 ~~~ BookInfo.objects.filter(bread__gt=F('bcomment')) ~~~ 例: 查询图书阅读量大于2倍评论量图书信息 ~~~ BookInfo.objects.filter(bread__gt=F('bcomment')*2) ~~~ # Q对象 用于查询时条件之间的逻辑关系.`not and or`可以对Q对象进行`& | ~`操作 使用之前需要先导入 ~~~ from django.db.models import Q ~~~ 例: 查询id大于3且阅读量大于30的图书信息 ~~~ BookInfo.objects.filter(Q(id__gt=3)|Q(bread__gt=30)) ~~~ 例: 查询id不等于3图书的信息 ~~~ BookInfo.objects.filter(~Q(id=3)) ~~~ # 聚合函数 对查询结果进行聚合操作 ~~~ sum count avg max min ~~~ aggregate: 调用这个函数来使用聚合.返回值是一个字典 使用前需要先导入聚合类 ~~~ from django.db.models import Sum,Count,Max,Min,Avg ~~~ 例: 查询所有图书的数目 ~~~ BookInfo.objects.all().aggregate(Count('id')) BookInfo.objects.aggregate(Count('id')) ~~~ 例: 查询所有图书阅读量的总和 ~~~ BookInfo.objects.aggregate(Sum('bread')) ~~~ count函数,返回值是一个数字 作用:统计满足条件的数目 ~~~ BookInfo.objects.all().count() ~~~ # 查询集 all,filter,exclude,order_by调用这些函数会产生一个查询集 QuerySet类对象可以继续调用上面的所有函数 **查询集特性** 1. 惰性查询: 只有在实际使用查询集中的数据才会发生对数据库的真正查询 2. 缓存: 当使用的是同一个查询集时,第一次会发生实际数据库的查询,然后把结果缓存起来,之后再使用这个查询集时,使用的是缓存中的结果 **限制查询集** 可以对一个查询集进行**取下标或者切片**操作来限制查询集的结果 对一个查询集进行切片操作**会产生一个新的查询集,下标不允许为负数** | 方式 | 说明 | | --- | --- | | b[0] | 如果b[0]不存在,会抛出IndexError异常 | | b[0:1].get() | 如果b[0:1].get()不存在,会抛出DoesNotExist异常 | exists:判断一个查询集中是否有数据: True,False