一、 事务
1.1 如何开启事务
前言
事务是MySQL数据库中得一个重要概念
事务的目的:为了保证多个SQL语句执行成功,执行失败,前后保持一致,保证数据安全
ACID属性:
A:
C:
I:
D:
事务的隔离级别 # 数据库很重要------》数据库-----》前端-----》vue、js 冒泡等
DBA:运维的范畴
from django.db import transactiontry:with transaction.atomic():# SQL1# SQL2# SQL3"""写在同一个with语句的代码块都是属于同一个事务,要么同时成功,要么同时失败"""except Exception as e:print(e) # 记录日志transaction.rollback()
1.2 常见的字段类型和参数
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(AutoField) - bigint自增列,必须填入参数 primary_key=TrueSmallIntegerField(IntegerField): - 小整数 -32768 ~ 32767PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) - 正小整数 0 ~ 32767BigIntegerField(IntegerField): - 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807BooleanField(Field) - 布尔值类型 True/False 1/0name varchar(1024) content text;TextField(Field) - 文本类型FileField(Field) - 字符串,路径保存在数据库,文件上传到指定目录 - 参数: upload_to = "" 上传文件的保存路径 storage = None 存储组件,默认django.core.files.storage.FileSystemStorageImageField(FileField) - 字符串,路径保存在数据库,文件上传到指定目录 - 参数: upload_to = "" 上传文件的保存路径 storage = None 存储组件,默认django.core.files.storage.FileSystemStorageTimeField(DateTimeCheckMixin, Field) - 时间格式 HH:MM[:ss[.uuuuuu]]FloatField(Field) - 浮点型DecimalField(Field) - 10进制小数 - 参数: max_digits,小数总长度 decimal_places,小数位长度BinaryField(Field) - 二进制类型
1.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,每次更新数据记录的时候会更新该字段。
1.4 关系字段
ForeignKeyto 设置要关联的表 to_field 设置要关联的表的字段related_name 反向操作时,使用的字段名,用于代替原反向查询时的’表名_set’。on_delete 当删除关联表中的数据时,当前表与其关联的行的行为。 models.CASCADE 删除关联数据,与之关联也删除models.DO_NOTHING 删除关联数据,引发错误IntegrityErrormodels.PROTECT 删除关联数据,引发错误ProtectedErrormodels.SET_NULL 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)models.SET_DEFAULT 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)models.SET 删除关联数据, a. 与之关联的值设置为指定值,设置:models.SET(值) b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)db_constraint 是否在数据库中创建外键约束,默认为True。OneToOneField(unique):ForeignKey(unqiue=True) unique """谁在什么时间评论了什么内容""" # 根评论 # 子评论:评论评论的评论 PHP是世界上最好的语言 # 跟Python是世界上最好的语言 # 子java才是 # 子id content create_time user_id pid 1 '' '' '' 0 2 '' '' '' 1 3 '' '' '' 2 4无限极分类:cate id name pid 1 家用电器1 0 2 家用电器2 0 3 家用电器3 0 4 家用电器4 0 5 家用电器5 0 5 冰箱 1 6 洗衣机 1 7 空调 1 8 电脑配件 3models.Foreign(to='cate') # 自己关联自己 models.Foreign(to='self') # 自己关联自己 自关联省市下拉框 city id name pid 1 上海 0 2 北京 0 3 河南 0 4 广东 0 5 浦东 1 5 浦东 1 5 浦东 1 5 浦东 1 5 朝阳 2 5 朝阳 2 5 朝阳 2 5 朝阳 2 5 朝阳 2# 自定义字段(了解) 自定义char类型字段: class FixedCharField(models.Field):"""自定义的char类型的字段类"""def __init__(self, max_length, *args, **kwargs):self.max_length = max_lengthsuper(FixedCharField, self).__init__(max_length=max_length, *args, **kwargs)def db_type(self, connection):"""限定生成数据库表的字段类型为char,长度为max_length指定的值"""return 'char(%s)' % self.max_length