zoukankan      html  css  js  c++  java
  • 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():
    
    
    
  • 相关阅读:
    socket选项设置
    shell 备忘录
    VIM中cscope和tags数据库的添加
    MFC程序设计中的BeginPaint/EndPaint和GetDC/ReleaseDC的使用
    shell 命令行参数解析
    do{...}while(0)用法总结
    0长度数组的使用
    在线帮助文档
    GCC编译器帮助文档
    几款优秀的Linux基准测试工具
  • 原文地址:https://www.cnblogs.com/robert-zhou/p/10536406.html
Copyright © 2011-2022 走看看