Django数据库补充之事务
往数据库写入数据时,如果写入了不完整的数据,我们称之为脏数据。事务管理(transaction)可以防止这种情况发生。事务管理一旦监测到写入异常,会执行回滚操作,即要么写入完整的数据,要么不写入。在Django中使用事务很简单,我们来测试一下:
新建项目Transaction,创建应用app01,编辑models创建两张表并执行数据库迁移,如下:
from django.db import modelsclass UserInfo(models.Model):username = models.CharField(max_length=32)email = models.EmailField(max_length=64)class Dept(models.Model):title = models.CharField(max_length=32)
定义路由:
from django.conf.urls import url from app01 import viewsurlpatterns = [url(r'^test/$', views.test), ]
定义test视图函数:
from django.shortcuts import render, HttpResponse from . import modelsdef test(request):try:from django.db import transaction # 导入事务with transaction.atomic():user_obj = models.UserInfo.objects.create(username='Lena', email='example@live.com')dept_obj = models.Dept.objects.create(title='IT')except Exception as e:return HttpResponse('error happened, db rollback')return HttpResponse('OK')
说明:
- 以上将创建
user_obj
和dept_obj
记录的行为组合成一个不可分割的原子性操作,原子内执行的数据库操作发生任何异常,都会执行回滚操作。 - 事物检查异常回滚,但是不容错,错误还是会抛出,因此这里用了异常捕捉。
- 正常情况下访问
http://127.0.0.1:8000/test/
,将会得到OK响应,如果我们手动将dept_obj = models.Dept.objects.create(title='IT')
的title='IT'
改为name='IT'
,手动造成异常,那么会触发事物回滚,写入的user_obj
也会撤销。这一点可以查看数据库验证。
- 以上将创建
注意一点:事务需要数据库引擎支持,比如Innodb引擎就是支持的。
Django数据库补充之事务相关推荐
- 补充spring事务传播性没有考虑的几种情况
spring传播机制的讲解参考: https://segmentfault.com/a/1190000013341344#articleHeader3 http://blog.51cto.com/ja ...
- 【转】Django 数据库的操作
2019独角兽企业重金招聘Python工程师标准>>> Django 紧紧地遵循这种 MVC 模式,可以称得上是一种 MVC 框架.以下是 Django 中 M.V 和 C 各自的含 ...
- Python3 Django的补充
Python3 Django的补充 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/79526637 以下 ...
- 数据库语言与事务管理
数据库查询 1.use [库名]/describle[表名] /desc[表名] desc/describle作用一样,desc 是describe的缩写,都是查询表的数据结构, use切换数据库名称 ...
- MySQL数据库中的事务(四大特性)
1. 事务的介绍 事务就是用户定义的一系列执行SQL语句的操作, 这些操作要么完全地执行,要么完全地都不执行, 它是一个不可分割的工作执行单元. 2. 事务的四大特性 原子性(Atomicity) 一 ...
- MySQL数据库中默认事务隔离级别是?
MySQL数据库中默认事务隔离级别是? 事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节.事务执行过程中出错,会回滚到 ...
- 免费开放阅读 | 数据库管理系统的事务原理(上)
作者介绍: 那海蓝蓝,腾讯技术工程事业群计费平台部金融云TDSQL数据库T4级专家,熟悉PostgreSQL.MySQL.Informix等数据库内核技术,著有<数据库查询优化器的艺术>一 ...
- Django从理论到实战(part31)--Django数据库查询操作
学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: Django数据库查询操作 查找是数据库操作中一个非常重要的技术,查询一般就是使用filter.exclude以及get三个 ...
- Python学习---django知识补充之CBV
Django知识补充之CBV Django: url --> def函数 FBV[function based view] 用函数和URL进行匹配 url --> ...
最新文章
- Linux(CentOS6.5)中安装maven
- 将TVM集成到PyTorch上
- 2019阿里巴巴面试题+答案
- mysql timestamp 转型_MySQL的timestamp类型自动更新问题【转】
- python中的赋值和深浅拷贝
- android 仿ios tabs,React Native兼容iOS Android的TabBar
- 好用的python学习软件_5种好用的Python工具!Python学习分析
- 画一个空心圆_圆形在PPT中的6大妙用,每一个都能瞬间提升PPT的逼格!
- 常见笔顺错误的字_[转载]常见笔画笔顺易错字大全
- vivo和小米鸿蒙系统哪个好,vivo和华为还有小米,哪个系统流畅度更好?
- 职场:因抢一个月饼,惨遭阿里开除,如今他把生活过成这样
- 软件开发工程师应该具备哪些证书_初级软件工程师证书简介
- 有趣的JS加密(一)AA加密颜文字加密
- Java多线程系列--“JUC集合”07之 ArrayBlockingQueue
- android .dex文件,对于Android DEX文件详细说明
- 80c51单片机c语言程序,80C51单片机电子钟程序
- 联想电脑 功能键切换正常键盘模式(简单)
- AE正确释放打开资源
- 纳米金/聚多巴胺/普鲁士蓝/四氧化三铁(Au-Dopa-PB-Fe3O4)|铂/普鲁士蓝(Pt/PB)复合纳米线|PDDA包裹的普鲁士蓝纳米粒子
- Kubernetes基础:Deployment中ReplicaSet
热门文章
- poj3279 反转 挑战程序设计竞赛
- EOSIO:EOSIO最新版1.4.0 钱包开发环境搭建
- Python-----规范化开发
- weak password
- 寒假作业三:抓老鼠,亏了还是赚了
- JQuery-Validate明明配置好了但是不生效?卡了2个小时的bug解决了,原因很简单。...
- 手眼标定eye-to-hand 示例:handeye_stationarycam_calibration
- 使用Huploadify上传文件并动态传递参数到后台
- 性能测试脚本之SQLServer执行语句
- MVC初学 - The type or namespace name 'DbContext' could not be found