第59天:django学习(八)

事务

事务是MySQL数据库中得一个重要概念,事务的目的:为了保证多个SQL语句执行成功,执行失败,前后保持一致,保证数据安全。

开启事务的三个关键字

start transaction

commit

rollback

开启事务

python 复制代码
 from django.db import transaction
    try:
        with transaction.atomic():
            # SQL1
            # SQL2
            # SQL3
            """写在同一个with语句的代码块都是属于同一个事务,要么同时成功,要么同时失败"""
    except Exception as e:
        print(e)  # 记录日志
        transaction.rollback()

常见的字段类型

字段类型 描述
AutoField int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。
IntegerField 一个整数类型,范围在 -2147483648 to 2147483647。
CharField 字符类型,必须提供max_length参数, max_length表示字符长度。
DateField 日期字段,日期格式 YYYY-MM-DD,相当于Python中的datetime.date()实例。
DateTimeField 日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]] [TZ],相当于Python中的datetime.datetime()实例
BigAutoField bigint自增列,必须填入参数 primary_key=True
SmallIntegerField 小整数 -32768 ~ 32767
PositiveSmallIntegerField 正小整数 0 ~ 32767
BigIntegerField 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807
BooleanField 布尔值类型 True/False 1/0
TextField 文本类型
FileField 字符串,路径保存在数据库,文件上传到指定目录

常见的参数

参数 描述
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
TimeField 时间格式 HH:MM[:ss[.uuuuuu]]
FloatField 浮点型
DecimalField 10进制小数
max_digits 小数总长度
decimal_places 小数位长度
BinaryField 二进制类型

ORM参数

参数 描述
null 用于表示某个字段可以为空。
unique 如果设置为unique=True 则该字段在此表中必须是唯一的 。
db_index 如果db_index=True 则代表着为此字段设置索引。
default 为该字段设置默认值。
DateFied 日期字段,精确到年月日
DateTimeField 日期字段,精确到年月日时分秒
auto_now_add 配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。
auto_now 配置上auto_now=True,每次更新数据记录的时候会更新该字段。

关系字段

字段 描述
to 设置要关联的表
to_field 设置要关联的表的字段
related_name 反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'。
on_delete 当删除关联表中的数据时,当前表与其关联的行的行为。
models.CASCADE 删除关联数据,与之关联也删除
models.DO_NOTHING 删除关联数据,什么也不做
models.PROTECT 删除关联数据,引发错误ProtectedError
models.SET_NULL 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)
models.SET_DEFAULT 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)
models.SET 删除关联数据,与之关联的值设置为指定值,设置:models.SET(值),与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
db_constraint 是否在数据库中创建外键约束,默认为True。

自定义字段

python 复制代码
class FixedCharField(models.Field):
    """
    自定义的char类型的字段类
    """

    def __init__(self, max_length, *args, **kwargs):
        self.max_length = max_length
        super(FixedCharField, self).__init__(max_length=max_length, *args, **kwargs)

    def db_type(self, connection):
        """
        限定生成数据库表的字段类型为char,长度为max_length指定的值
        """
        return 'char(%s)' % self.max_length
相关推荐
后端小张15 分钟前
【AI 学习】从0到1深入理解Agent AI智能体:理论与实践融合指南
人工智能·学习·搜索引擎·ai·agent·agi·ai agent
无敌最俊朗@17 分钟前
Qt面试题day01
java·数据库·面试
星空的资源小屋25 分钟前
极速精准!XSearch本地文件搜索神器
javascript·人工智能·django·电脑
九年义务漏网鲨鱼26 分钟前
【大模型学习】现代大模型架构(二):旋转位置编码和SwiGLU
深度学习·学习·大模型·智能体
TracyCoder12334 分钟前
微服务框架选型学习笔记
笔记·学习·微服务
专注于大数据技术栈1 小时前
java学习--单例模式之懒汉式
java·学习·单例模式
hd51cc1 小时前
MFC多线程学习笔记一:用户界面线程和工作线程
笔记·学习·mfc
ivanfor6662 小时前
多租户架构的三级权限体系:设计逻辑与精准控制实现
java·开发语言·数据库
先生沉默先3 小时前
Nginx 反向代理学习:单端口统一访问多服务
学习·nginx·arcgis
TDengine (老段)3 小时前
TDengine IDMP 重塑智慧水务运营(内附 Step by Step 步骤)
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据