事务
事务是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