• Django模型层之如何开启事务、常见的字段类型和参数、ORM字段参数、关系字段


    【1】事务

    事务的目的:保证多个SQL语句要么同时成功,要么同时失败

     

    事务的4个特性:原子性、一致性、间隔性、持久性 

     

    事务的三个方法:

            1、transaction ---------- 开启事务

            2、rollback -------- 回滚

            3、commit --------- 提交

            【1.1】开启事务

    1. from django.db import transaction
    2. try:
    3. # 开启事务
    4. with transaction.atomic():
    5. SQL1
    6. SQL2
    7. SQL3
    8. except Exception as e:
    9. print(e) #记录日志
    10. transaction.rollback()

    【2】常见的字段类型和参数 

                    

    字段类型解释及参数
    AutoFieldint自增列,参数primary_key=True(必填),如果model中没有自增列,会自动创建一个名为id的列
    TntegerField整数类型,范围在-2147483648 ~ 2147483647
    CharField字符类型,参数max_length(必填),max_length表示参数
    DateField日期字段,日期格式:YYYY-MM-DD,年月日
    DateTimeField日期字段,格式:YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],年月日时分秒
    BigAutoField(AutoField)bigint自增列,必须填入参数 primary_key=True
    SmallIntegerField(IntegerField)- 小整数 范围:-32768 ~ 32767
     
    PositiveSmallIntegerField(PostitiveIntegerRelDbTypeMixin, IntegerField)正小整数 范围:0 ~ 32767
    BigIntegerField(IntegerField)长整型(有符号的)范围:-9223372036854775808 ~ 9223372036854775807
    BooleanField(Field)布尔值类型   True/False      1/0
    TextField(Field)

    字符串,路径保存在数据库,文件上传到指定目录

    参数:

    upload_to =""     上传文件的保存路径

    storage = None    存储组件,默认django.core.files.storage.FileSystemStorage

    ImageField(FileField)

    字符串:路径保存在数据库,文件上传到指定,目录

    参数:

    upload_to = ""      上传文件的保存路径

    storage = None   存储组件,默认django.core.files.storage.FileSystemStorage

    TimeField(DateTimeCheckMixin,Field)时间格式:  HH:MM[:ss[.uuuuuu]]   时分秒
    FloatField(Field)浮点型
    DecimalField(Field)

    10进制小数

    参数:

            max_digits  --------- 小数总长度

            decimal_places --------小数位长度

    BinaryField(Field)

    二进制类型

    【3】ORM字段参数

    •  null
      • 用于表示某个字段为空
    • unique
      • 如果设置为unique=True 则该字段在此表中必须是唯一的
    • db_index
      • 如果db_index=True 则代表着为此字段设置索引
    • default
      • 为该字段设置默认值
    • DateField和DateTimeField
      • 参数:auto_now_add
        • 配置auto_now_add=True,创建数据记录时,会把当前时间添加到数据库
      • 参数:auto_now
        • 配置上auto_now=True,每次更新数据记录的时候会更新该字段

    【4】关系字段

            【4.1】ForeignKey

    外键类型在ORM中用来表示外键关联关系,一般把ForeignKey设置在一对多表关系中多的一方

     

    ForeignKey可以和其它表做关联关系同时也可以和自身做关联关系

     

     【4.2】ForeignKey中设置的属性

    • to
      • 设置要关联的表
    • to_field
      • 设置要关联的表的字段
    • related_name
      • 反向操作时,使用的字段名,用于代替原反向查询时的 " 表名_set "
    • related_query_name
      • 反向查询操作时,使用的连接前缀,用于替换表名
    • on_delete
      • 当删除关联表中的数据时,当前表与其关联的行的行为

    【4.3】on_delete的值

    • models.CASCADE
      • 删除关联数据,与之关联也删除
    • models.DO_NOTHING
      • 删除关联数据,引发错误IntegrityError
    • models.PROTECT
      • 删除关联数据,引发错误ProtectedError
    • models.SET_NULL
      • 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)
    • models.SET_DEFAULT
      • 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)
    • models.SET
      • 删除关联数据
        • 与之关联的值设置为指定值,设置:models.SET(值)
        • 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)

    【4.4】db_constraint

    • db_constraint
      • 是否在数据库中创建外键约束,默认为True

    【4.5】OneToOneField

    • 一对一表关系
    • 属性
      • to
        • 设置要关联的表
      • to_field
        • 设置要关联的字段
      • on_delete
        • 同ForeignKey字段
  • 相关阅读:
    Redis面试二“缓存击穿是什么”
    攻防世界WEB练习区(view_source、get_post、robots)
    element - el-table动态设置高度?不滚动了?
    【软考】6.1 信息安全及技术
    mysql大表的更新和删除
    澳洲猫罐头的表现如何呢?真正好的顶尖猫罐头大揭秘
    linux-windows10使用wsl运行linux子系统
    从零开始,小白也能学会的创建Git仓库实操
    大模型的实践应用4-ChatGLM-6b大模型的结构与核心代码解读,最全的ChatGLM模型架构介绍与源码解读
    【云原生 | Kubernetes 系列】--K8s环境rdb,cefs的使用
  • 原文地址:https://blog.csdn.net/m0_69962105/article/details/134463261