django09 分组聚合 重要

编程入门 行业动态 更新时间:2024-10-03 02:23:11

django09  分组聚合 重要

django09 分组聚合 重要

聚合查询

'''
# 聚合函数的使用场景-- 单独使用:不分组,只查聚合结果-- 分组使用:按字段分组,可查分组字段与聚合结果# 导入聚合函数
from django.db.models import Avg, Max, Min, Count, Sum
'''

单独聚合查询:aggregate

'''
# 语法:
aggregate(别名=聚合函数('字段'))# 规则:
1.可以同时对多个字段进行聚合处理:aggregate(别名1=聚合函数1('字段1'), ..., 别名n=聚合函数n('字段n'))
3.是QuerySet对象方法
2.方法返回值返回值为dict类型# 案例:所有书中最贵的书的价格
Book.objects.all().aggregate(high_price=Max('price'))
'''

分组聚合查询:annotate

'''
# 语法:
values('分组字段').annotate(别名=聚合函数('字段')).filter(聚合字段别名条件).values('取分组字段', '取聚合字段别名')# 规则:
1.values(...).annotate(...)为分组组合,values控制分组字段,annotate控制聚合字段
2.values可按多个字段分组values('分组字段1', ..., '分组字段n'),??如果省略代表按操作表的主键分组
3.可以同时对多个字段进行聚合处理annotate(别名1=聚合函数1('字段1'), ..., 别名n=聚合函数n('字段n'))
4.分组后的的filter代表having判断,只对聚合字段进行条件判断,可以省略(对非聚合字段或分组字段进行条件判断代表where判断)
5.取字段值values(...)省略默认取所有分组字段与聚合字段,也可以自主取个别分组字段及聚合字段(取字段的values中出现了非分组或非聚合字段,该字段自动成为分组字段)# 案例:每个出版社出版的最贵的书的价格高于50元的出版社名与最高价格
Book.objects.all().values('publish__name').annotate(high_price=Max('price')).filter(high_price__gt=50).values('publish__name', 'high_price')
'''

字段

常用共有字段属性

'''
1. null:默认为False,True表示字段可为null
2. blank:默认为False,True表示字段可为空
3. choice:可选的,限制了该选项的字段值必须是所指定的choice中的一个:-- sex = models.SmallIntegerField(choices=((1, '男'), (2, "女")))-- obj.get_sex_display()
4. db_column:自定义字段名
5. db_index:如果为True的话,设置索引
6. default:字段默认值
7. editable:默认为True,若为False,则不会在/admin/界面显示
8. primary_key:若设置为True,则表示将该字段设置为主键。一般情况下django默认会设置一个自增长的id主键。
9. unique:若设置为True,该字段值不可重复
'''

常用字段

'''
1. AutoField():默认自增主键(primary_key=True),django会默认建立id字段主键
2. BooleanField():布尔字段,对应数据库tinyint类型
3. CharField():字符类型-- 字段属性max_length=64,数据长度,必须明确
4. DateField():年月日时间类型-- 字段属性auto_now=True,数据被更新就会更新时间-- 字段属性auto_now_add=True,数据第一次参数时产生
5. DateTimeField():年月日小时分钟秒时间类型-- 字段属性auto_now=True,数据被更新就会更新时间-- 字段属性auto_now_add=True,数据第一次参数时产生
6. DecimalField():混合精度的小数类型-- 字段属性max_digits=3,限定数字的最大位数(包含小数位)-- 字段属性decimal_places=2,限制小数的最大位数
7. IntegerField():整型
'''

不常用字段

'''
1. BigAutoField():大整型自增
2. BigIntegerField():长整型
3. EmailField():邮箱字段,拥有/admin/验证
4. FloatField():浮点型小数
5. SmallIntegerField():小整型
6. TextField():大文本类型
7. FileField():文件字段
'''

关系字段

'''
1. ForeignKey():外键字段-- 字段属性to关联模型类-- 字段属性to_field关联字段,省略默认关联主键-- 字段属性on_delete (外键关联数据被删除时的操作)-- models.CASCADE 级联删除-- modles.PROTECT 抛出异常-- models.SET_NULL 设置空值-- models.SET_DEFAULT 设置默认值-- models.SET(value)自定义值-- 字段属性related_name自定义反向查询的字段名-- 字段属性db_constraint=False取消关联关系,但还可以使用连表查询
总结:models.ForeignKey(to='关联的类名', null=True, on_delete=models.SET_NULL, db_constraint=False, related_name="本类名小写")
2、OneToOneField():一对一外键字段-- 字段同外键
3、ManyToManyField():多对多关系字段-- 字段属性to关联模型类-- 字段属性through关联关系类-- 字段属性through_fields关联关系表中(本身类名小写字段, 关联表类名小写字段)
'''
'''
# Mysql连接配置
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'db_name','HOST': '127.0.0.1','USER': 'root','PASSWORD': 'root'}
}
# 配置ORM的loggers日志
LOGGING = {'version': 1,'disable_existing_loggers': False,'handlers': {'console': {'level': 'DEBUG','class': 'logging.StreamHandler',},},'loggers': {'django.db.backends': {'handlers': ['console'],'propagate': True,'level': 'DEBUG',},}
}
'''
from django.db.models import Aggregate, CharField
class Concat(Aggregate):function = 'GROUP_CONCAT'template = '%(function)s(%(distinct)s%(expression)s)'def __init__(self, expression, distinct=False, **extra):super(Concat, self).__init__(expression,distinct='DISTINCT' if distinct else '',output_field=CharField(), **extra)

更多推荐

django09 分组聚合 重要

本文发布于:2024-03-12 20:16:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1732330.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!