Django 聚合函数 和 排序函数,关联查询

一下介绍的数据和字段 都在此文中进行的 创建和添加 https://blog.csdn.net/weixin_44685869/article/details/105368727

1. 聚合函数

使用aggregate()过滤器调用聚合函数。聚合函数包括:Avg平均,Count数量,Max最大,Min最小,Sum求和,被定义在django.db.models中。

  • 例:查询图书的总阅读量。

    from django.db.models import Sum
    BookInfo.objects.aggregate(Sum('readcount'))
    
    {'readcount__sum': 126}
    

注意aggregate的返回值是一个字典类型,格式如下:

{'属性名__聚合类小写':}

如:{‘readcount__sum’: 126}

使用count 时一般不使用aggregate()过滤器。

  • 例:查询图书总数。

    BookInfo.objects.count()
    

注意count函数的返回值是一个数字。

2. 排序

使用order_by对结果进行排序

# 默认升序

BookInfo.objects.all().order_by('readcount')

<QuerySet [<BookInfo: 射雕英雄传>, <BookInfo: 笑傲江湖>, <BookInfo: 天龙八部>, <BookInfo: 雪山飞狐>]>
# 降序

BookInfo.objects.all().order_by('-readcount')
<QuerySet [<BookInfo: 雪山飞狐>, <BookInfo: 天龙八部>, <BookInfo: 笑傲江湖>, <BookInfo: 射雕英雄传>]>



关联查询

查询书籍为1的所有人物信息
查询人物为1的书籍信息

  • 由一到多的访问语法:

    一对应的模型类对象.多对应的模型类名小写_set 例:

    book = BookInfo.objects.get(id=1)
    book.peopleinfo_set.all()
    
    <QuerySet [<PeopleInfo: 郭靖>, <PeopleInfo: 黄蓉>, <PeopleInfo: 黄药师>, <PeopleInfo: 欧阳锋>, <PeopleInfo: 梅超风>]>
    
  • 由多到一的访问语法:

    多对应的模型类对象.多对应的模型类中的关系类属性名 例:

    person = PeopleInfo.objects.get(id=1)
    person.book
    
    <BookInfo: 射雕英雄传>
    

访问一对应的模型类关联对象的id语法:

多对应的模型类对象.关联类属性_id

  • 例:

    person = PeopleInfo.objects.get(id=1)
    person.book_id
    
    1
    

关联过滤查询

由多模型类条件查询一模型类数据:

语法如下:

关联模型类名小写__属性名__条件运算符=值

注意:如果没有"__运算符"部分,表示等于。

查询图书,要求图书人物为"郭靖"
查询图书,要求图书中人物的描述包含"八"

  • 例:查询图书,要求图书人物为"郭靖"

    book = BookInfo.objects.filter(peopleinfo__name='郭靖')
    book
    
    <QuerySet [<BookInfo: 射雕英雄传>]>
    
  • 查询图书,要求图书中人物的描述包含"八"

    book = BookInfo.objects.filter(peopleinfo__description__contains='八')
    book
    
    <QuerySet [<BookInfo: 射雕英雄传>, <BookInfo: 天龙八部>]>
    
由一模型类条件查询多模型类数据:

语法如下:

一模型类关联属性名__一模型类属性名__条件运算符=值

注意:如果没有"__运算符"部分,表示等于。

查询书名为“天龙八部”的所有人物
查询图书阅读量大于30的所有人物

  • 例:查询书名为“天龙八部”的所有人物。

    people = PeopleInfo.objects.filter(book__name='天龙八部')
    people
    
    <QuerySet [<PeopleInfo: 乔峰>, <PeopleInfo: 段誉>, <PeopleInfo: 虚竹>, <PeopleInfo: 王语嫣>]>
    
  • 查询图书阅读量大于30的所有人物

    people = PeopleInfo.objects.filter(book__readcount__gt=30)
    people
    
    <QuerySet [<PeopleInfo: 乔峰>, <PeopleInfo: 段誉>, <PeopleInfo: 虚竹>, <PeopleInfo: 王语嫣>, <PeopleIn
    
发布了125 篇原创文章 · 获赞 260 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/weixin_44685869/article/details/105400359
今日推荐