首页 > 编程语言 >python之路51 聚合查询 分组查询

python之路51 聚合查询 分组查询

时间:2022-12-17 18:44:50浏览次数:47  
标签:__ Book python res price 51 查询 models objects

图书管理系统

1.表设计
    先考虑普通字段再考虑外键字段
    数据库迁移、测试数据录入
2.首页展示
3.书籍展示
4.书籍添加
5.书籍编辑
    后端如何获取用户想要编辑的数据、前端如何展示出待编辑的数据
6.书籍删除

聚合查询

聚合函数:Max Min Count Avg
在ORM中支持单独使用聚合函数 aggregate

from django.db.models import Max,min,Sum,Avg
res = models.Book.objects.aggregate(Max('price'),Count('pk'),最小价格=Min('price'),allPrice=Sum('price'),平均价格=Avg('price'))
print(res)

分组查询

"""
如果执行orm分组查询报错 并且有关键字sql_mode strict mode
    移除slq_mode中的only_full_group_by(配置里面的严格模式)
"""
# 分组查询
# 统计每一本书的作者个数
# res = models.Book.objects.annotate(author_num=Count('authors__pk')).values('title', 'author_num')
# print(res)
# 统计每个出版社卖的最便宜的书的价格
# res = models.Publish.objects.annotate(min_price=Min('book__price')).values('name', 'min_price')
# print(res)
# 统计不止一个作者的图书
# 1.先统计每本书的作者个数
# res = models.Book.objects.annotate(author_num=Count('authors__pk'))
# print(res)
# 2.筛选出作者个数大于1的数据
# res = models.Book.objects.annotate(author_num=Count('authors__pk')).filter(author_num__gt=1).values('title','author_num')
# print(res)
# 查询每个作者出的书的总价格
    res = models.Author.objects.annotate(总价=Sum('book__price'),count_book=Count('book__pk')).values('name','总价','count_book')
    print(res)
"""
models.表名.objects.annotate()
     按照表分组
models.表名.objects.values('字段名').annotate()
     按照values括号内指定的字段分组
"""
    # 按出版社id查询该出版社出版了几本书
    res = models.Book.objects.values('publish_id').annotate(count_pk=Count('pk')).values('publish_id', 'count_pk')
    print(res)

F与Q查询

1.查询库存数大于卖出数的书籍
'''当查询条件不是明确的也需要从数据库中获取 就需要使用F查询'''
from django.db.models import F
#  1.查询库存数大于卖出数的书籍
    # res = models.Book.objects.filter(kucun__gt=F('maichu'))
    # print(res)
    # 2.将所有书的价格涨800
    # models.Book.objects.update(price=F('price')+800)
    # 3.将所有书的名称后面追加爆款(添加字符串 必须要用以下两个模块)
    from django.db.models.functions import Concat
    from django.db.models import Value
    # models.Book.objects.update(title=Concat(F('title'),Value('新款')))
    # 查询主键是1或者价格大于2000的书籍
    from django.db.models import Q
    # res = models.Book.objects.filter(Q(pk=1), Q(price__gt=3000))  # 逗号是and关系
    # print(res)
    res = models.Book.objects.filter(Q(PK=2) | Q(price__gt=4000))  # |是or
    # res = models.Book.objects.filter(~Q(PK=2) | Q(price__gt=4000))  # ~是not
    print(res)


标签:__,Book,python,res,price,51,查询,models,objects
From: https://www.cnblogs.com/xm15/p/16989333.html

相关文章

  • Python 面向对象
    目录​​python继承​​​​面向对象技术简介​​​​创建类​​​​self代表类的实例,而非类​​​​创建实例对象​​​​访问属性​​​​Python内置类属性​​​​python......
  • 图书管理系统、聚合查询、分组查询、F与Q查询
    图书管理系统讲解聚合查询分组查询F与Q查询图书管理系统讲解1.表设计 先考虑普通字段再考虑外键字段 数据库迁移、测试数据录入2.首页展示3.书籍展示4......
  • Python中open()文件操作/OS目录操作
    File对象测试数据的读写与操作#defopen(file,mode='r',buffering=None,encoding=None,errors=None,newline=None,closefd=True):#knownspecialcaseofo......
  • FAQ:说一说一条查询语句是如何执行的?
    一条SQL语句内部执行流程是怎样的?1select*fromuserwhereid=1;1.客户端发送SQL语句到服务器,先要通过连接器连接到数据库,在完成TCP握手之后,验证用户名和密码。......
  • f-strings: Python字符串处理的瑞士军刀
    从3.6开始,Python新增了一个格式化字符串的方法,称之为f-string。其用法就是在python原始字符串的基础上增加f/F前缀,以大括号{}标明被替换的字段。f-string在本质......
  • Python学习:内建属性、内建函数的教程
    1.内建属性python3中查看类的内建属性和方法:>>>classPerson:...pass...>>>dir(Person)['__class__','__delattr__','__dict__','__dir__','__doc_......
  • Python之threading: 带你了解多线程的强大威力!
    前言什么是多线程多线程是指在一个程序中同时创建和使用多个执行流(thread)来执行不同的任务。这样多个任务就可以同时进行,从而提高程序的执行效率。在python使用多线......
  • 27python的匿名函数与map函数
    在Python中,可以使用lambda关键字来创建匿名函数。这些函数不需要名字,因为它们通常只使用一次。下面是一个例子:lambdax:x**2这是一个计算平方的匿名函数。它接受......
  • 27python的匿名函数
    在Python中,可以使用lambda关键字来创建匿名函数。这些函数不需要名字,因为它们通常只使用一次。下面是一个例子:lambdax:x**2这是一个计算平方的匿名函数。它接受......
  • 使用匿名类型存储LINQ查询结果
    匿名类型的特性:1.既支持简单类型也支持复杂类型。简单类型必须是一个非空初始值,复杂类型则是一个以new开头的初始化项;2.匿名类型的属性是只读的,没有属性设置器,它......