django第10天(聚合查询,常用字段)

django第10天

聚合查询

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

单独聚合查询:aggregate

语法:
aggregate(别名 = 聚合函数('字段'))

规则:
1.QuerySet对象的方法
2.可以同时对多个字段进行聚合处理aggregate(
别名1=聚合函数1('字段1'),...,别名n=聚合函数n('字段n'))
3.返回值为字典

from django.db.models import Avg,Sum,Max,Min,Count

dic = Book.objects.all().aggregate(high_price = Max('price'),low_price = Min('price'),avg_price = Avg('price'))
print(dic.get('high_price'))
print(dic.get('low_price'))
print(dic.get('avg_price'))

分组聚合查询:annotate

语法:
values('分组字段').annotate(别名=聚合函数('字段')).filter(聚合字段别名条件).values('取分组字段','取聚合字段别名')
规则:
1.values(...).annotate(...)为分组组合,values控制分组字段,annotate控制聚合字段
2.values可按多个字段分组
3.可以同时对多个字段进行聚合处理annotate(别名1=聚合函数1('字段1'),...,别名n = 聚合函数n('字段n'))
4.分组后的filter代表having判断,只对聚合字段进行条件判断,可以省略(非聚合字段进行条件判断代表where判断)
5.取字段值values(...)省略默认取所有分组字段与聚合字段,也可以自主取个别分组字段及聚合字段,如果字段中有分组字段与聚合字段外的字段,会将该字段当做分组字段,影响查询结果

字段

常用共有字段属性

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取消关联关系,但还可以使用连表查询
my_publish = Foreign_keyFiled()	
2、OneToOneField():一对一外键字段
	-- 字段同外键
3、ManyToManyField():多对多关系字段
	-- 字段属性to关联模型类
	-- 字段属性through关联关系类
	-- 字段属性through_fields关联关系表中(本身类名小写字段, 关联表类名小写字段)
'''
django创建外键的优点:
    1.建立连接后,封装了连表的方法,便于查询
	2.保护数据,被依赖表的数据不存在时,无法创建依赖表的对应数据
    缺点:
    1.插入数据麻烦
    2.当表多,关系复杂时会形成环状,删除数据会变的困难

为了使用django的连表查询和更方便的插入数据
取消关联关系,但可以使用连表查询
db_constraint = False


#一对一外键字段
OneToOneField():


原文地址:https://www.cnblogs.com/robert-zhou/p/10536406.html