首页 > 其他分享 >Django框架7

Django框架7

时间:2023-01-02 14:55:12浏览次数:35  
标签:Book 框架 models res price Django objects 查询

今日内容概要

  • 聚合查询
  • 分组查询
  • F与Q查询

今日内容详细

聚合查询

'''
MySQL中常用的聚合函数
	Max	Min	Sum	Count Avg
	需要结合分组一起使用
'''
在ORM中支持单独使用聚合函数通过aggregate实现

# 导入聚合函数
from django.db.models import Max, Min, Sum, Count, Avg

# 使用方法
res = models.Book.objects.aggregate(Max('price')
#并且支持重命名
res = models.Book.objects.aggregate(Max('price'), 平均价格=Avg('price'))

分组查询

'''
当使用ORM分组查询报错 并且报错信息中有关键字sql_mode strict mode等
只需要移除sql_mode中的only_full_group_by即可
'''

models.表名.objects.annotate()	按表分组

1.统计每一本书的作者个数
res = models.Book.objects.annotate(author_num=Count('author_pk')).values('name', 'author_num')
2.统计出每个出版社卖的最便宜的书的价格
res = models.Publish.objects.annotate(min_price=Min('book__price')).values('name', 'min_price')
3.统计不止一个作者的图书
	先统计每本书的作者个数
	res = models.Book.objects.annotate(author_count=Count('author__pk'))
	再筛选作者个数大于1的数据
	res = models.Book.objects.annotate(author_count=Count('author__pk')).values('name', 'author_count')
4.查询每个作者出的书的总价格
res = models.Author.objects.annotate(all_price=Sum('book__price')).values('name', 'all_price')
'''
不仅可以按表分组 也可以按字段分组
	models.表名.objects.values('字段名').annotate()
	values放在annotate前面是告诉annotate按照指定字段分组 在后面就是取值
'''

F与Q查询

'''
F查询就是当查询条件不是明确的 也需要从数据库中获取 那么就会用到F查询
Q查询就是将查询条件变为or或者not 默认的查询条件为and
'''
# 需要先导入
from django.db.models import F, Q

1.查询库存数量大于卖出数量的书籍
res = models.Book.objects.filter(kucun__gt=F('maichu'))
2.将所有的书价格上涨100
res = models.Book.objects.update(price=F('price') + 100)
3.将所有的书名后面追加爆款
# 对于字符串的拼接也需要导入额外的模块
from django.db.models.functions import Concat
from django.db.models import Value
models.Book.objects.update(name=Concat(F('name'), Value('爆款')))
4.查询主键是1或者价格大于200的书籍
# 条件之间用竖杠隔开 用逗号的话还是and关系
res = models.Book.object.filter(Q(pk=1) | Q(price__gt=200))
# 在条件前面加波浪号就是not ~
res = models.Book.object.filter(~Q(pk=1) | Q(price__gt=200))

标签:Book,框架,models,res,price,Django,objects,查询
From: https://www.cnblogs.com/lzjjjj/p/17019907.html

相关文章

  • django11
    django中间件三个了解的方法1.process_view 路由匹配成功之后执行视图函数/类之前自动触发(顺序同process_request)2.process_exception 视图函数/类执行报错自动触发(......
  • Django框架7
    今日内容概要Q查询进阶操作ORM查询优化ORM事务操作ORM常用字段类型ORM常用字段参数Ajax请求(待定)今日内容详细Q查询进阶操作fromdjango.db.modelsimportQq......
  • Django框架10
    今日内容概要django中间件三个了解的方法基于django中间件实现功能的插拔式设计cookie与session简介django操作cookiedjango操作session今日内容详细django中间件......
  • Django框架9
    今日内容概要forms组件渲染标签forms组件展示信息forms组件校验补充forms组件参数补充forms组件源码剖析modelform组件django中间件今日内容详细forms组件渲染......
  • django12
    csrf跨站请求伪造钓鱼网站:模仿一个正规的网站让用户在该网站上做操作但是操作的结果会影响到用户正常的网站账户但是其中有一些猫腻 eg:英语四六级考试需要网上先缴......
  • Django框架11
    今日内容概要csrf跨站请求伪造csrf相关校验策略CBV添加装饰器的多种方式auth认证模块今日内容详细csrf跨站请求伪造钓鱼网站:模仿一个正规的网站让用户在该网站......
  • Django基础
    Django基础一、Django简介以及基本使用二、Django与数据库连接三、Django路由层四、Django视图层五、Django模板层六、Django模型层七、Django组件之Ajax请求八、......
  • 大数据趣味学习探讨(一):学习框架的重要性
    文章目录​​学习框架的重要性​​​​一、痛点​​​​二、规则vs元规则​​​​三、无穷无尽的新问题​​​​四、感悟​​学习框架的重要性框架类似底层方法论,有人说学习......
  • Django中models的字段
    常见的field类型:1.AutoField自增字段,它是一个根据ID自增长的IntegerField字段,通常不用自己设置,如果没有设置主键,django会自动添加它为主键字段2.CharField(max_length=n......
  • gluon 基于浏览器+nodejs 的桌面应用开发框架
    gluon基于浏览器+nodejs的桌面应用开发框架,好处是相对轻量,只使用系统浏览器,对于nodejs可以支持包含以及不包含模式目前支持chrome以及firfox浏览器器,打包的应用相对比......