如何开启事务
介绍常见的字段类型和参数
图书管理系统(页面的形式)
MVC和MTV模式
创建多对多表关系的三种方式
Ajax的介绍
Ajax的案例
它代表了原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
原子性(Atomicity):
事务被视为一个不可分割的原子操作单元。
这意味着要么全部操作成功并永久保存,要么全部操作失败并回滚到事务开始前的状态,不存在部分成功或部分失败的情况。
一致性(Consistency):
事务在执行前后,数据库都必须保持一致状态。
这意味着事务执行前后,数据库中的数据必须满足所有定义的完整性约束,例如列级别的约束、外键关系等。
隔离性(Isolation):
事务之间应该相互隔离,每个事务的执行应该与其他事务的执行相互独立,互不干扰。
隔离性确保了多个事务可以并发执行,而不会产生不一致的结果。
持久性(Durability):
from django.db import transaction
try:
with transaction.atomic():
# sql 1
# sql 2
# 在with代码块内书写所有的orm操作
# 这些操作都属于同一个事务
except Exception as e:
print(e)
print('执行其他操作')
AutoField
int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列
InterField
一个整数类型,范围在 -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
PositivesSmallIntegerField(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)
- 二进制类型
null
用于表示某个字段可以为空。
**unique**
如果设置为unique=True 则该字段在此表中必须是唯一的 。
**db_index**
如果db_index=True 则代表着为此字段设置索引。
**default**
为该字段设置默认值。
DateField和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
删除关联数据,引发错误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
"""谁在什么时间评论了什么内容"""
# 根评论
# 子评论:评论评论的评论
PHP是世界上最好的语言 # 跟
Python是世界上最好的语言 # 子
java才是 # 子
无限极分类
pid
models.Foreign(to='cate') # 自己关联自己
models.Foreign(to='self') # 自己关联自己 自关联
自定义字段(了解)
自定义char类型字段:
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