北京上海网站建设,免费舆情网站,网站开发服务流程,国外免费服务器平台文章目录 ORM事务操作开启事务 常见的字段类型和参数ORM还支持用户自定义字段类型ORM常用字段参数外键相关参数 ORM事务操作
引入事务
1.事务的四大特性原子性、一致性、隔离性、持久性
2.相关SQL关键字start transaction;rollback;commit;savapoint;
3.相关重要概念脏读、幻… 文章目录 ORM事务操作开启事务 常见的字段类型和参数ORM还支持用户自定义字段类型ORM常用字段参数外键相关参数 ORM事务操作
引入事务
1.事务的四大特性原子性、一致性、隔离性、持久性
2.相关SQL关键字start transaction;rollback;commit;savapoint;
3.相关重要概念脏读、幻读、不可重复读、MVCC多版本控制Django ORM提供了至少三种开启事务的方式
开启事务
from django.db import transactiontry:with transaction.atomic():# SQL1# SQL2# SQL3写在同一个with语句的代码块都是属于同一个事务要么同时成功要么同时失败except Exception as e:print(e) # 记录日志transaction.rollback()常见的字段类型和参数
1.AutoField(primary_key) # 字段才用可以让它自动创建
2.CharField(max_length) # 对应varchar字段存储有限的字符
3.IntegerField # 整型
4.BigIntergerField #整型比如手机号11位
5.DecimalField(max_digits,decimal_places) # 小数字段
6.DateField(auto_now,aoto_now_add) # 日期年月日
7.DateTimeField(auto_now auto_now_add) #日期(年月日时分秒)
8.Booleanfiels:传布尔值自动存0(False)或者1(True)
9.TextField:存储大段文本
10.EmailField:存储邮箱格式数据
11.FileField传文件对象自动保存到提前配置好的路径下并存储该路径信息
12.ForeignKeyField(to,on_delete) 实际外键字段建立一对一关系
13.OneToOneField(to,on_delete) 实际外键字段建立一对多关系
14.ManyToManyField(to) 虚拟外键字段建立多对多关系需要说明的是这些orm字段并非和sql字段一一对应有些是封装了一些逻辑功能在字段的创建、存储过程中的。
ORM还支持用户自定义字段类型
class MyCharField(models.Field):def __init__(self,max_length,*args,**kwargs):self.max_lengthmax_lengthsuper().__init__(max_lengthmax_length,*args,**kwargs)def db_type(self,connection):return char(%s) % self.max_lengthclass User(models.Model):namemodels.CharField(max_length32)infoMyCharField(max_length64)ORM常用字段参数
1.primary_key 主键字段
2.verbose_name 字段注释
3.max_length 字段长度
4.max_digits 小数总共多少位
5.decimal_places 小数点后面的位数
6.auto_now 每次操作数据自动更新事件
7.auto_now_add 首次创建自动更新事件后续不自动更新
在时间相关字段的独有参数设置为True则会自动执行相关功能。
8.null 允许字段为空
9.default 字段默认值
10.unique 唯一值
11.db_index 给字段添加索引
12.choices 当某个字段的可能性能够被列举完全的情况下使用
13.to/to_field/on_delete
eg:性别、学历、工作状态...class User(models.Model):namemodels.CharField(max_length32)info MyCharField(max_length64)# 提前列举好对应关系gender_choice((1,男性),(2,女性),(3,其他),)gender models.IntergerField(choicesgender_choice,nullTrue)user_obj User.objects.filter(pk1).first() # 拿到一个对象user_obj.gender # 直接点显示存储的真实数据user_obj.get_gender_display() # 通过这个方法拿显示转义后的选项外键相关参数
to 关联表
to_field 关联字段(不写默认关联数据主键)
on_delete 当删除关联表中的数据时当前表与其关联的行的行为。(只针对一对多和一对一关系)on_delete里面相关参数
1、models.CASCADE级联操作当主表中被连接的一条数据删除时从表中所有与之关联的数据同时被删除
2、models.SET_NULL当主表中的一行数据删除时从表中所有与之关联的数据的相关字段设置为null,此时注意定义外键时这个字段必须可以允许为空
3、models.PROTECT当主表中的一行数据删除时由于从表中相关字段是受保护的外键所以都不允许删除
4、models.SET_DEFAULT当主表中的一行数据删除时从表中所有相关的数据的关联字段设置为默认值此时注意定义外键时这个外键字段应该有一个默认值
5、models.SET()当主表中的一条数据删除时从表中所有的关联数据字段设置为SET()中设置的值与models.SET_DEFAULT相似只不过此时从表中的相关字段不需要设置default参数
6、models.DO_NOTHING什么都不做一切都看数据库级别的约束注数据库级别的默认约束为RESTRICT,这个约束与django中的models.PROTECT相似
ps主表一般是指在一对一、一对多中一的那一方当对其进行删除时另外一张表的所有元素都应该受到影响