Django知识

目录

一.如何开启事务

1.ACID是数据库事务的四个关键特性

2.如何开启事务

二.常见的字段类型和参数

1.常见的关系字段

2.ORM字段参数

3.关系字段


一.如何开启事务

1.ACID是数据库事务的四个关键特性

  • 它代表了原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)
    • 原子性(Atomicity):
      • 事务被视为一个不可分割的原子操作单元
      • 这意味着要么全部操作成功并永久保存,要么全部失败并回滚到事务之前的状态,不存在部分成功或部分失败的情况
    • 一致性(Consistency):
      • 事务在执行前后,数据库必须保持一致状态
      • 这意味着事务执行前后,数据库中的数据必须满足所有定义的完整性约束,例如列级别的约束,外键关系等
    • 隔离性(Isolation):
      • 事务之间应该相互隔离,每个事务的执行应该与其他事务的执行相互独立,互不干扰
      • 隔离性确保了多个事务可以并发执行,而不会产生不一致的结果
    • 持久性(Durability):
      • 一旦事务成功提交后,其所做的修改将永久保存在数据库中,即使发生系统故障或重启,数据也能够恢复到提交后的状态
      • 持久性通过将事务日志写入非易失性存储介质来实现,如硬盘驱动器或固态硬盘

2.如何开启事务

from django.db import transaction

try:
    with transaction.atomic():
        # sql 1
        # sql 2
        # 在with代码块内书写所有的orm操作
        # 这些操作都属于同一个事务
except Exception as e:
     print(e)
     print('执行其他操作')

二.常见的字段类型和参数

1.常见的关系字段

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=True

SmallIntegerField(IntegerField):
# - 小整数 -32768 ~ 32767

PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
# - 正小整数 0 ~ 32767

BigIntegerField(IntegerField):
# - 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807

BooleanField(Field)
# - 布尔值类型
True/False  1/0

name varchar(1024)
content text;

TextField(Field)
# - 文本类型

FileField(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)
# - 二进制类型

2.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,每次更新数据记录的时候会更新该字段。

3.关系字段

ForeignKey

to
# 设置要关联的表
to_field
# 设置要关联的表的字段

related_name
# 反向操作时,使用的字段名,用于代替原反向查询时的’表名_set’。

on_delete
# 当删除关联表中的数据时,当前表与其关联的行的行为。
models.CASCADE
# 删除关联数据,与之关联也删除

models.DO_NOTHING
# 删除关联数据,引发错误IntegrityError

models.PROTECT
# 删除关联数据,引发错误ProtectedError

models.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 

你可能感兴趣的:(数据库,django,后端,前端,python)