Django框架之模型层(二)
【十二】Django中如何开启事务
事务是MySQL数据库中得一个重要概念
事务的目的:为了保证多个SQL语句执行成功,执行失败,前后保持一致,保证数据安全
【1】ACID是数据库事务的四个关键特性
-
它代表了原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
-
原子性(Atomicity):
-
事务被视为一个不可分割的原子操作单元。
-
这意味着要么全部操作成功并永久保存,要么全部操作失败并回滚到事务开始前的状态,不存在部分成功或部分失败的情况。
-
-
-
一致性(Consistency):
-
事务在执行前后,数据库都必须保持一致状态。
-
这意味着事务执行前后,数据库中的数据必须满足所有定义的完整性约束,例如列级别的约束、外键关系等。
-
-
隔离性(Isolation):
-
事务之间应该相互隔离,每个事务的执行应该与其他事务的执行相互独立,互不干扰。
-
隔离性确保了多个事务可以并发执行,而不会产生不一致的结果。
-
-
持久性(Durability):
- 一旦事务成功提交后,其所做的修改将永久保存在数据库中,即使发生系统故障或重启,数据也能够恢复到提交后的状态。
- 持久性通过将事务日志写入非易失性存储介质来实现,如硬盘驱动器或固态硬盘。
【2】Django中如何开启事务
# 开启事务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。(一般不用它来存手机号(位数也不够),直接用字符串存,)
BigIntegerField(IntegerField)
- 长整型(有符号的)
- 范围在 -9223372036854775808 ~ 9223372036854775807
CharField
-
字符类型,必须提供max_length参数, max_length表示字符长度。
-
verbox_name 标识字段的注释
EmailField(CharField)
- varchar(254)
DecimalField(Field)
- max_digits,小数总长度
- decimal_places,小数位长度
TextField(Field)
- 文本类型
- 支持大段内容,无字数限制
FileField(Field)
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = ""- upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
- upload_to = "" 上传文件的保存路径
ImageField(FileField)
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = ""- upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
- upload_to = "" 上传文件的保存路径
DecimalField(Field)
- 10进制小数
- 参数:
max_digits,小数总长度decimal_places,小数位长度
BooleanField(Field)
- 字段为布尔值
- 数据库里面可以存 0/1
TimeField(DateTimeCheckMixin, Field)
- 时间格式 HH:MM[:ss[.uuuuuu]]
FloatField(Field)
- 浮点型
BinaryField(Field)
- 二进制类型
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
【关系字段】
ForeignKey
- 外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多'中'多'的一方。
- 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
OneToOneField
- 一对一字段。
- 通常一对一字段用来扩展已有字段。(通俗的说就是一个人的所有信息不是放在一张表里面的,简单的信息一张表,隐私的信息另一张表,之间通过一对一外键关联)
to
- 设置要关联的表。
to_field
- 设置要关联的字段。
on_delete
- 当删除关联表中的数据时,当前表与其关联的行的行为。(参考上面的例子)
【字段参数】
null
用于表示某个字段可以为空。
unique
如果设置为unique=True 则该字段在此表中必须是唯一的 。
Foregin(unique = True) ----> OneToOneField
db_index
如果db_index=True 则代表着为此字段设置索引。
default
为该字段设置默认值。
DateField和DateTimeField
auto_now_add
- 配置auto_now_add=True
- 创建数据记录的时候会把当前时间添加到数据库。
auto_now
- 配置上auto_now=True
- 每次更新数据记录的时候会更新该字段。
【支持自定义字段】
# 自定义字段(了解)
自定义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
相关文章:
Django框架之模型层(二)
【十二】Django中如何开启事务 事务是MySQL数据库中得一个重要概念 事务的目的:为了保证多个SQL语句执行成功,执行失败,前后保持一致,保证数据安全 【1】ACID是数据库事务的四个关键特性 它代表了原子性(Atomicity)、…...
C++之list
C之list list的构造 #include <iostream> #include<list> using namespace std;//打印函数 void printfList(const list<int>&L) {for(list<int>::const_iterator it L.begin();it ! L.end();it){cout<<*it<<" ";}cout<…...
C语言日记——调试篇
一、调试调试的基本步骤 发现程序错误的存在 以隔离、消除等方式对错误进行定位 确定错误产生的原因 提出纠正错误的解决办法 对程序错误予以改正,重新测试 二、Debug和Release Debug通常称为调试版本,它包含调试信息,并且不作任何优化…...
【python】Django——templates模板、静态文件、django模板语法、请求和响应
笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ 【Django专栏】 Django——django简介、django安装、创建项目、快速上手 Django——templates模板、静态文件、django模板语法、请求和响应 Django——连接mysql数据库 Django——templates模板、静态文件、djang…...
Android设计模式--观察者模式
时间是一只藏在黑暗中温柔的手,在你一出神一恍惚之间,物走星移 一,定义 观察者模式是定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新 字面意思很好理解&am…...
【Linux】Ubuntu16.04下安装python高版本--源码安装
Ubuntu16.04下完美安装python高版本及对应版本的pip 方法一:直接用命令安装python3.6(但我没安装成功) 好像是因为Ubuntu16.04的软件仓库(源)中python的最高版本就是python3.5,所以无法直接用apt来安装 #方法一 sudo…...
变长子网划分问题的二叉树解法
计网的变长子网划分、计组的变长操作码划分、数据结构的哈夫曼编码,都是前缀编码的本质(变长操作码的二叉树解法我还在琢磨中) 【二叉树解法】每条从叶结点到根节点的路径上有且只有一个被分配的结点: 【例】现将一个IP网络划分成…...
编译安装redis及配置多实例
yum安装是这种十分简单的方法我们就不在提及了,今天我们来做一下redis的编译安装 Redis源码包官方下载链接:http://download.redis.io/releases/ 一、编译安装: 安装依赖包 dnf -y install make gcc jemalloc-devel systemd-devel如果是…...
网络(一)总纲
一 总纲 ① 背景 1、该资料不管是在华为内部还是外部都是很出名的2、该教程仅仅作为个人笔记,形成自己的网络知识体系,自己会按照教程手把手做实验,copy图谱备注: 自己没有处理过物理网和虚拟网,所以会以一个小白的角度去理解,可能存在偏差3、立足点:…...
WPF中的App类介绍
在WPF (Windows Presentation Foundation) 应用程序中,App 类扮演着很重要的角色。这个类通常在每个WPF应用程序中都会有,并且生成在App.xaml文件和其代码后台App.xaml.cs中。App类通常继承自System.Windows.Application类,并且有以下的主要职…...
.nc格式文件的显示及特殊裁剪方式
最近我们遇到一个nc格式的文件,需要将它做成报告插图,bing搜索一番以后,了解到nc的全名为NetCDF(network Common Data Form),是一种网络通用数据格式,广泛用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。…...
为什么需要线程池?C++如何实现一个线程池?
为什么需要线程池?C如何实现一个线程池? 为什么需要线程池?C如何实现一个线程池?...
多视图聚类的论文阅读
当聚类的方式使用的是某一类预定义好的相似性度量时, 会出现如下情况: 数据聚类方面取得了成功,但它们通常依赖于预定义的相似性度量,而这些度量受原始方法的影响:当输入维数相对较高时,往往是无效的。 1. Deep Mult…...
shell脚本适用场景
1.适用场景 Shell脚本是一种用于自动化和批量处理任务的脚本语言。它通常在Unix/Linux系统中使用,并且被广泛应用于各种场景,包括但不限于以下几个方面: 自动化任务:Shell脚本可以用于编写自动化脚本,完成一系列重复性…...
Bash openldap同步AD组织数据
将AD的ou同步到openldap(可支持全量同步和增量同步) 整体思路如下: 从ad导出所有的数据,然后进行参数替换以及处理,处理后的文件称为A;从openldap导出所有的数据,然后进行参数替换以及处理&am…...
C#WPF文本转语音实例
本文介绍C#WPF文本转语音实例 实现方法:使用类库(SpeechSynthesizer )实现的。 一、首先是安装程序包。 二、创建项目 需要添加引用using System.Speech.Synthesis; UI界面 <Windowx:Class="TextToSpeechDemo.MainWindow"xmlns="http://schemas.micr…...
08-流媒体-RTMP拉流
整体方案: 采集端:摄像头采集(YUV)->编码(YUV转H264)->写封装(H264转FLV)->RTMP推流 客户端:RTMP拉流->解封装(FLV转H264)…...
一键免费去除视频水印和字幕的AI工具
最近有学员经常让我分享好用的智能抹除视频水印字幕AI工具,今天就给大家分享一个我经常用到的这款工具——腾讯智影,这个平台提供的智能抹除功能,借助这个工具我们可以将视频中不需要的字幕或者水印删除掉。 不过这款工具每天有三次免费次数…...
实验六:Android的网络编程基础
实验六:Android 的网络编程基础 6.1 实验目的 本次实验的目的是让大家熟悉 Android 开发中的如何获取天气预报,包括了 解和熟悉 WebView、WebService 使用、网络编程事件处理等内容。 6.2 实验要求 熟悉和掌握 WebView 使用 了解 Android 的网络编程…...
09-流媒体-FLV解复用
整体方案: 采集端:摄像头采集(YUV)->编码(YUV转H264)->写封装(H264转FLV)->RTMP推流 客户端:RTMP拉流->解封装(FLV转H264)…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 : QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果