当前位置: 首页 > news >正文

Django学习日志08

如何开启事务

事务的目的:为了保证多个SQL语句执行成功,执行失败,前后保持一致,保证数据安全

ACID属性:
A:原子性(Atomicity):指事务是原子的,对事务中的操作要么全部成功,要么全部失败。例如,如果一次购物过程中有两个购买操作,一个操作成功,另一个失败,那么购物过程会被取消,购物车会回滚,以保证原子性不受影响。
C:一致性(Consistency):指操作后的数据库从一个一致状态转化为另一个一致状态。例如,如果某用户时区变化,数据库中记录的时间也会随之变化,以保证一致性。
I:隔离性(Isolation):指数据库中正在执行的事务,看不到其他事务的活动。例如,如果两个客户同时向一个银行账户汇款,银行会先锁定该账户并处理一个请求,再锁定该账户并处理另一个请求,以保证隔离性。
D:持久性(Durability):指一个提交的事务,对数据库中的数据修改是永久有效的。例如,一次交易提交时,数据库中的数据对所有客户端是可见的,以保证持久性。

start transaction;
commit;
rollback;

开启事务

 from django.db import transactiontry:with transaction.atomic():# SQL1# SQL2# SQL3"""写在同一个with语句的代码块都是属于同一个事务,要么同时成功,要么同时失败"""except Exception as e:print(e)  # 记录日志transaction.rollback()

常见的ORM字段类型

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

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

关系字段

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 

无限极分类

 

 

自定义字段

自定义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

图书管理系统

相关文章:

  • 【CHI】Ordering保序
  • Ubuntu20.0中安装Gradle
  • Matplotlib实现Label及Title都在下方的最佳姿势
  • NX二次开发UF_CAM_ask_post_template_name 函数介绍
  • 命令执行无回显的判断方法及dnslog相关例题的讲解
  • 【金融分析】Python:病人预约安排政策 | 金融模拟分析
  • 3.8-镜像的发布
  • Java 12 及Tomcat 部署配置
  • BUUCTF [BJDCTF2020]一叶障目 1
  • vscode设置前进、后退快捷键
  • CISP模拟试题(一)
  • 鸿蒙APP外包开发上线流程
  • GaussDB新特性Ustore存储引擎介绍
  • BUUCTF 菜刀666 1
  • Linux——编译器gcc/g++、调试器gdb以及自动化构建工具makefilemake详解
  • 时间复杂度分析经典问题——最大子序列和
  • 2017年终总结、随想
  • 3.7、@ResponseBody 和 @RestController
  • Android交互
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Docker下部署自己的LNMP工作环境
  • GitUp, 你不可错过的秀外慧中的git工具
  • JavaScript实现分页效果
  • Linux各目录及每个目录的详细介绍
  • Lucene解析 - 基本概念
  • MySQL-事务管理(基础)
  • Spring Boot快速入门(一):Hello Spring Boot
  • springMvc学习笔记(2)
  • 包装类对象
  • 闭包--闭包作用之保存(一)
  • 大快搜索数据爬虫技术实例安装教学篇
  • 理清楚Vue的结构
  • 手写双向链表LinkedList的几个常用功能
  • 原生 js 实现移动端 Touch 滑动反弹
  • 自动记录MySQL慢查询快照脚本
  • 自制字幕遮挡器
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • (12)Linux 常见的三种进程状态
  • (26)4.7 字符函数和字符串函数
  • (4)事件处理——(7)简单事件(Simple events)
  • (C语言)逆序输出字符串
  • (js)循环条件满足时终止循环
  • (第61天)多租户架构(CDB/PDB)
  • (二)PySpark3:SparkSQL编程
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (转)JAVA中的堆栈
  • (转)大型网站架构演变和知识体系
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .net core 6 redis操作类
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET Reactor简单使用教程
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数