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

【1】事务

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

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

事务的三个方法:

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

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

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

【1.1】开启事务

python 复制代码
from django.db import transaction

try:
    # 开启事务
    with transaction.atomic():
        SQL1
        SQL2
        SQL3
except Exception as e:
    print(e)    #记录日志

    transaction.rollback()

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

|-------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------|
| 字段类型 | 解释及参数 |
| AutoField | int自增列,参数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字段
相关推荐
广州灵眸科技有限公司12 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
憧憬成为web高手15 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学15 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh17 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z1234567898618 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD18 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo18 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
Ai_easygo19 小时前
MCP 协议实战:用 Claude Desktop 连本地 SQLite,5 分钟搭一个能查数据的 AI 助手
jvm·人工智能·sqlite
TlSfoward19 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记19 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘