Django2.1框架 学习笔记 day04


视频 http://sina.lt/geGR

返回查询集的过滤器如下

  • 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'))


附件:  test2-0612.zip   
---------------------
作者:前世的我
来源:前世的我
原文:http://www.w55.site/blog/article/look/id/18.html
版权声明:本文为博主原创文章,转载请附上博文链接!