• 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
    
    
  • 相关阅读:
    KafkaSpout 重复消费问题解决
    FastJson 输出值 首字母大小写问题
    Kafka0.7运行时报错 kafka/javaapi/consumer/ConsumerConnector : Unsupported major.minor version 51.0 解决
    Zookeeper原理与Curator使用
    Strom 消息处理机制 中英对照翻译 (Storm如何保证消息被完全处理)
    Mac安装 Storm 小结
    linux下实现ftp上传文件
    Task 0.0 in stage 1.0 (TID 1) had a not serializable result: org.apache.hadoop.hbase.client.Result
    Spark操作HBase
    maven-pom-project文件报错
  • 原文地址:https://www.cnblogs.com/LZF-190903/p/11968458.html
Copyright © 2020-2023  润新知