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
    
    
  • 相关阅读:
    【LeetCode】17. Letter Combinations of a Phone Number
    【LeetCode】16. 3Sum Closest
    【LeetCode】15. 3Sum 三个数和为0
    【LeetCode】14. Longest Common Prefix 最长前缀子串
    【LeetCode】13. Roman to Integer 罗马数字转整数
    【LeetCode】12. Integer to Roman 整型数转罗马数
    【LeetCode】11. Container With Most Water
    【LeetCode】10. Regular Expression Matching
    Models of good programmer
    RSA Algorithm
  • 原文地址:https://www.cnblogs.com/LZF-190903/p/11968458.html
Copyright © 2011-2022 走看看