zoukankan      html  css  js  c++  java
  • day 54小结

    聚合查询

    ​ 级联删除 级联更新 (外键字段带来的约束)

    ​ 操作外键字段管理数据时
    ​ 书和出版社是一对多的关系 外键字段在书那
    ​ 这个时候把出版社删了 所对应的书字段也会自动给删除
    ​ 这个时候如果你把出版社主键改变了 那么书籍表中对应的出版社主键值也会改变

    聚合函数

    ​ 聚合函数必须用在分组之后
    ​ 没有分组其实默认就是一组

    1. 关键字 aggregate
    2. 还需要导入模块
      from django.db.models import Max,Min,Sum,Avg,Count
    res = models.Book.objects.aggregate(sm = Sum('price'))
    
    res = models.Book.objects.aggregate(Max('price'),Min('prince'),Sum('price'),Count('price'),Avg('price'))
    

    分组查询

    mysql中用 group by

    ​ 什么时候用分组
    ​ 1.统计每一个部门的平均薪资
    ​ 2.统计每一个部门的男女比例

    ​ 1.关键字 annotate
    ​ 2.借助于聚合函数
    django.db.models import Max,Min,Sum,Avg,Count
    djangomodels后面点什么 就按什么分组

    统计每一本书的作者人数 书名
    res = models.Book.objects.annotate(author_num = Count('authors__id')).values('author_num','title')
    
    

    F与Q查询

    from django.db.models import F,Q

    F能够获取表中字段所对应的值

    1.查询库存数大于卖出数的书
    res = models.Book.objects.filter(kun_cun__gt = F('mai_cun')).values('title')  # 后面的条件是数据库的其他字段值
    
    2.将所有书的价格上涨100块
    models.Book.objects.all().update(price=F('price')+100)
    
    3.将所有书的名称后面全部加上"爆款"后缀	(了解知识点)	操作字符串数据要借助Concat方法
    from django.db.models.functions import Concat
    from django.db.models import Value
    models.Book.bojects.update(title=Concat(F('title'),Value('爆款')))
    

    Q查询

    models.Book.objects.filter(Q(title='xxx'),Q(kun_cun=500))	# Q包裹后 , 还是and关系
    models.Book.objects.filter(Q(title='xxx') | Q(kun_cun=500))  # | 就是or的关系
    models.Book.objects.filter(`Q(title='xxx') | Q(kun_cun=500))  # ` 就是not的关系
    

    Q对象高级用法

    q = Q()
    q.connector = 'or'	# 默认是and	可以改成or
    q.children.append(('tltle','xxx'))
    models.Book.objects.filter(`q)	# `取反
    

    orm字段及参数

    CharField varchar
    IntegerField int
    BigInterField bigint
    EmailField varchar(254)
    DateField
    DateField
    DateTimeField
    ​ auto_now: 每次修改数据的时候 都会自动将当前修改时间更新上去 实时更新
    ​ auto_now_add: 在创建数据的时候 会将当前时间自动记录 之后不会自动修改 除非人为修改
    AutoField auto_increment
    BooleanField 布尔值 (该字段在储存的时候 你只需要传布尔值True或False 它会自动存成 1/0)
    TextField 专门用来存大段文本
    FileField 专门用来存文件路径 '/etc/data/a.txt'
    ​ upload_to = '/etc/data' 给该字段传值的时候 直接传文件对象
    ​ 会自动将文件对象保存到upload_to后面的指定的文件路径
    ​ 然后将路径保存到数据库
    DecimalField(Field)
    ​ 10进制小数
    ​ 参数:
    ​ max_digits, 小数总长度
    ​ decimal_places, 小数位长度

    字段参数

    null 表示某个字段为空

    unique 如果设置unique=Ture则该字段在此表中必须唯一

    db_index 如果这个参数为True则表示此字段设置索引(索引加多了会影响写入速度)

    default 设置默认值

    to 设置要关联的表

    to_field 设置要关联的表的字段

    on_delete 当删除关联表中的数据 当前表与其关联的行的行为
    models.CASCADE 删除关联数据

    db_constraint 是否在数据库中创建约束 默认True

    自定义字段

    ​ 如何定义字段类型

    class MyCharField(models.Field):
        def __init__(self,max_length,*args,**kwargs):
            self.max_length = max_length
            # 重新调用父类的方法
            super().__init__(max_length=max_length,*args,**kwargs)
            
        def db_type(self,connection):
            return 'char(%s)'%self.max_length
    

    orm中的事务操作

    ​ 什么是事务
    ​ 四大特性
    ​ ACIDbi
    ​ 原子性 事务中的操作不可分,要么都做,要么都不做
    ​ 一致性 事务必须是是数据库从一个一致性状态变到另一个一致性状态(与原子性密切相关)
    ​ 隔离性 事物之间不会被其他事务干扰
    ​ 持久性 事务一旦提交,对数据影响是永久性的

    ​ 数据库三大范式 设计范式

    1.第一范式:

    ​ 又称1NF 它指的是在一个应用中的数据都可以组织成由行和列的表格形式 且表格的任意一个行列交叉点即单元格 都不可再划分为行或列的形式(也就是确保每一列的原子性) 满足1NF是关系模式规范的最低要求 否则 将有很多基本操作在这样的关系模式中实现不了

    2.第二范式:

    ​ 又称2NF 它指的是在满足1NF的基础上 一张数据表的任何非主键字段都全部依赖于主键字段 没有任何非主键只依赖于主键字段的一部分 即 可以用主键字段来唯一的确定一条记录 比如学号+课程号的 联合主键 可以唯一的确定某个成绩是哪个学院的哪门成绩 缺少学号或却少课程号 都不能确定成绩的意义

    3.第三范式

    ​ 又称3NF 它指的是在满足2NF的基础上 数据表的任何非主键字段之间都不产生函数依赖 即非主键字段之间没有依赖关系, 全部只依赖于班级 可将学员信息和班级信息单独存放 以满足3NF

    django中创建事务

    from django.db import transaction
    
    with transaction.atomic():
        #在缩进中的代码中书写数据库代码
    	#该缩进中的所有代码都是一个事务
    	pass
    
    
  • 相关阅读:
    docker容器网络查看
    资源模型、资源管理
    kubectl命令设置在元集群上
    K8S容器网络
    Kubernetes部署Prometheus+Grafana以及HPA实验测试
    Shell 脚本之 MySQL 一键安装及基本配置(几分钟搞定)
    安装 Flannel 报错:network plugin is not ready: cni config uninitialized
    uniapp h5页面引入企业微信js-sdk
    判断IP地址及闰年,并写出相关测试用例
    第一个自动化测试案例 java+selenium
  • 原文地址:https://www.cnblogs.com/LZF-190903/p/11968458.html
Copyright © 2011-2022 走看看