返回查询集的过滤器如下:
all():返回所有数据。
filter():返回满足条件的数据。
exclude():返回满足条件之外的数据,相当于sql语句中where部分的not关键字。
order_by():对结果进行排序。
返回单个值的过滤器如下:
get():返回单个满足条件的对象
如果未找到会引发"模型类.DoesNotExist"异常。
如果多条被返回,会引发"模型类.MultipleObjectsReturned"异常。
count():返回当前查询结果的总条数。
aggregate():聚合,返回一个字典。
判断某一个查询集中是否有数据:
exists():判断查询集中是否有数据,如果有则返回True,没有则返回False。
修改app/model
from django.db import models # Create your models here. # 文章类 class BookInfo(models.Model): # 指定 btitle 对应字段 为title btitle = models.CharField(max_length=20, db_column="title") bpub_date = models.DateField() # 发布时间 bread = models.IntegerField(default=0) # 阅读量 bcomment = models.IntegerField(default=0) # 评论量 isDelete = models.BooleanField(default=False) # 逻辑删除 # 人物类 class PersonInfo(models.Model): pname = models.CharField(max_length=20) # 人物名称 pgender = models.BooleanField(default=False) # 性别 idDelete = models.BooleanField(default=False) # 是否删除 # 人物描述 数据库可为空 但是 操作不能为空 pcomment = models.CharField(max_length=200, null=True, blank=False)
编写 view.py
from datetime import date from django.shortcuts import render # Create your views here. from app.models import BookInfo def index(request): # aa = BookInfo.objects.get(id=40) # print(aa.id,aa.btitle,aa.bpub_date) #全部 集合 #bb = BookInfo.objects.all() # 全等于 集合 # dd = BookInfo.objects.filter(id__exact='兔') # for cc in dd: # print(cc.id,cc.btitle) # 包含,模糊查询 集合 # dd = BookInfo.objects.filter(btitle__contains='兔') #包含,模糊查询 集合 #以梦结尾,模糊查询 集合 #BookInfo.objects.filter(btitle__endswith='梦') #以红开头的,模糊查询 集合 #BookInfo.objects.filter(btitle__startswith='红') # 查询指定字段不等于空 集合 #BookInfo.objects.filter(btitle__isnull=False) #同一字段 多条件查询 #BookInfo.objects.filter(id__in=[1,2]) # 大于小于 gt、gte、lt、lte:大于、大于等于、小于、小于等于。 # BookInfo.objects.filter(id__gt=3) #大于3 # BookInfo.objects.filter(id__lt=3) #小于3 # 查询日期 aa = BookInfo.objects.filter(bpub_date__gt=date(1985,1,1)) print(aa) return render(request,'app/index.html')
函数名 | 功能 | 返回值 | 说明 |
---|---|---|---|
get | 返回表中满足条件的一条数据,并且只能是一条数据 | 模型类对象 | 参数中写查询条件。 1) 查到多条数据抛异常 MultipleObjectsReturned 2) 查询不到数据抛异常 DoesNotExist |
all | 返回表格中所有数据 | QuerySet类型 | 查询集 |
filter | 返回满足条件的数据 | QuerySet类型 | 参数写查询条件 |
exclude | 返回不满足条件的数据 | QuerySet类型 | 参数写查询条件 |
order_by | 对查询结果进行排序 | QuerySet类型 | 参数中写根据哪些字段进行排序 |
from datetime import date from django.db.models import Q, Sum from django.http import HttpResponse from django.shortcuts import render # Create your views here. from app.models import BookInfo def index(request): # aa = BookInfo.objects.get(id=40) # print(aa.id,aa.btitle,aa.bpub_date) #全部 集合 #bb = BookInfo.objects.all() #bb = BookInfo.objects.all()[0:2]钱三条 # 全等于 集合 # dd = BookInfo.objects.filter(id__exact='兔') # for cc in dd: # print(cc.id,cc.btitle) # 包含,模糊查询 集合 # dd = BookInfo.objects.filter(btitle__contains='兔') #包含,模糊查询 集合 #以梦结尾,模糊查询 集合 #BookInfo.objects.filter(btitle__endswith='梦') #以红开头的,模糊查询 集合 #BookInfo.objects.filter(btitle__startswith='红') # 查询指定字段不等于空 集合 #BookInfo.objects.filter(btitle__isnull=False) #同一字段 多条件查询 #BookInfo.objects.filter(id__in=[1,2]) # 大于小于 gt、gte、lt、lte:大于、大于等于、小于、小于等于。 # BookInfo.objects.filter(id__gt=3) #大于3 # BookInfo.objects.filter(id__lt=3) #小于3 # 查询日期 # aa = BookInfo.objects.filter(bpub_date__gt=date(1985,1,1)) aa = BookInfo.objects.filter(bpub_date__year=1985) print(aa) return render(request,'app/index.html') # Q对象 def index1(request): #多条件查询 #books = BookInfo.objects.filter(btitle__gt=20,id__lt=10) #并且 # books = BookInfo.objects.filter(Q(btitle__gt=20) & Q(id__lt=10)) # 或 #books = BookInfo.objects.filter(Q(btitle__gt=20) | Q(id__lt=3)) # 不等于 3 pk 主键 books = BookInfo.objects.filter(~Q(id__lt=3)) msg = '' for book in books: msg += str(book.id) + ', ' + book.btitle + ', ' + str(book.bpub_date) + ', ' + str(book.bread) # str += book.btitle msg += '<br>' print(msg) return HttpResponse(msg) # 聚合函数 aggregate() Avg Count Max Min Sum 平均 总数 最大 最小 总和 # 返回的格式 {'id__sum': 21, 'bread__sum': 372} 查询字段__类型 def sum(s): # 查总量 字典 msg = BookInfo.objects.aggregate(Sum("id"),Sum("bread")) # 返回 {'id__sum': 21, 'bread__sum': 372} # 查总数 # msg = BookInfo.objects.count() #返回int类型 print(msg) return HttpResponse(2356) # 其他 def about(s): # exact:表示判等 list = BookInfo.objects.filter(id__exact=1) list = BookInfo.objects.filter(id=1) # contains:是否包含 list = BookInfo.objects.filter(btitle__contains='传') # startswith、endswith:以指定值开头或结尾。 list = BookInfo.objects.filter(btitle__endswith='梦') #以梦结尾 # isnull:是否为null。 list = BookInfo.objects.filter(btitle__isnull=False) # in :是否包含在范围内。 list = BookInfo.objects.filter(id__in=[1, 3, 5]) # gt、gte、lt、lte:大于、大于等于、小于、小于等于。 list = BookInfo.objects.filter(id__gt=3) # 时间 year、month、day、week_day、hour、minute、second list = BookInfo.objects.filter(bpub_date__year=1980) # 1980内 list = BookInfo.objects.filter(bpub_date__gt=date(1990, 1, 1)) #大于1990 # 两个属性比较 F对象 def f(s): from django.db.models import F list = BookInfo.objects.filter(bread__gte=F('bcomment'))