往数据库写入数据时,如果写入了不完整的数据,我们称之为脏数据。事务管理(transaction)可以防止这种情况发生。事务管理一旦监测到写入异常,会执行回滚操作,即要么写入完整的数据,要么不写入。在Django中使用事务很简单,我们来测试一下:

  1. 新建项目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)

  2. 定义路由:

    from django.conf.urls import url
    from app01 import viewsurlpatterns = [url(r'^test/$', views.test),
    ]

  3. 定义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')

    说明:

    1. 以上将创建user_objdept_obj记录的行为组合成一个不可分割的原子性操作,原子内执行的数据库操作发生任何异常,都会执行回滚操作。
    2. 事物检查异常回滚,但是不容错,错误还是会抛出,因此这里用了异常捕捉。
    3. 正常情况下访问http://127.0.0.1:8000/test/,将会得到OK响应,如果我们手动将dept_obj = models.Dept.objects.create(title='IT')title='IT'改为name='IT',手动造成异常,那么会触发事物回滚,写入的user_obj也会撤销。这一点可以查看数据库验证。

注意一点:事务需要数据库引擎支持,比如Innodb引擎就是支持的。

Django数据库补充之事务相关推荐

  1. 补充spring事务传播性没有考虑的几种情况

    spring传播机制的讲解参考: https://segmentfault.com/a/1190000013341344#articleHeader3 http://blog.51cto.com/ja ...

  2. 【转】Django 数据库的操作

    2019独角兽企业重金招聘Python工程师标准>>> Django 紧紧地遵循这种 MVC 模式,可以称得上是一种 MVC 框架.以下是 Django 中 M.V 和 C 各自的含 ...

  3. Python3 Django的补充

    Python3 Django的补充 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/79526637 以下 ...

  4. 数据库语言与事务管理

    数据库查询 1.use [库名]/describle[表名] /desc[表名] desc/describle作用一样,desc 是describe的缩写,都是查询表的数据结构, use切换数据库名称 ...

  5. MySQL数据库中的事务(四大特性)

    1. 事务的介绍 事务就是用户定义的一系列执行SQL语句的操作, 这些操作要么完全地执行,要么完全地都不执行, 它是一个不可分割的工作执行单元. 2. 事务的四大特性 原子性(Atomicity) 一 ...

  6. MySQL数据库中默认事务隔离级别是?

    MySQL数据库中默认事务隔离级别是? 事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节.事务执行过程中出错,会回滚到 ...

  7. 免费开放阅读 | 数据库管理系统的事务原理(上)

    作者介绍: 那海蓝蓝,腾讯技术工程事业群计费平台部金融云TDSQL数据库T4级专家,熟悉PostgreSQL.MySQL.Informix等数据库内核技术,著有<数据库查询优化器的艺术>一 ...

  8. Django从理论到实战(part31)--Django数据库查询操作

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: Django数据库查询操作 查找是数据库操作中一个非常重要的技术,查询一般就是使用filter.exclude以及get三个 ...

  9. Python学习---django知识补充之CBV

    Django知识补充之CBV Django: url    -->  def函数      FBV[function based view]  用函数和URL进行匹配 url    --> ...

最新文章

  1. Linux(CentOS6.5)中安装maven
  2. 将TVM集成到PyTorch上
  3. 2019阿里巴巴面试题+答案
  4. mysql timestamp 转型_MySQL的timestamp类型自动更新问题【转】
  5. python中的赋值和深浅拷贝
  6. android 仿ios tabs,React Native兼容iOS Android的TabBar
  7. 好用的python学习软件_5种好用的Python工具!Python学习分析
  8. 画一个空心圆_圆形在PPT中的6大妙用,每一个都能瞬间提升PPT的逼格!
  9. 常见笔顺错误的字_[转载]常见笔画笔顺易错字大全
  10. vivo和小米鸿蒙系统哪个好,vivo和华为还有小米,哪个系统流畅度更好?
  11. 职场:因抢一个月饼,惨遭阿里开除,如今他把生活过成这样
  12. 软件开发工程师应该具备哪些证书_初级软件工程师证书简介
  13. 有趣的JS加密(一)AA加密颜文字加密
  14. Java多线程系列--“JUC集合”07之 ArrayBlockingQueue
  15. android .dex文件,对于Android DEX文件详细说明
  16. 80c51单片机c语言程序,80C51单片机电子钟程序
  17. 联想电脑 功能键切换正常键盘模式(简单)
  18. AE正确释放打开资源
  19. 纳米金/聚多巴胺/普鲁士蓝/四氧化三铁(Au-Dopa-PB-Fe3O4)|铂/普鲁士蓝(Pt/PB)复合纳米线|PDDA包裹的普鲁士蓝纳米粒子
  20. Kubernetes基础:Deployment中ReplicaSet

热门文章

  1. poj3279 反转 挑战程序设计竞赛
  2. EOSIO:EOSIO最新版1.4.0 钱包开发环境搭建
  3. Python-----规范化开发
  4. weak password
  5. 寒假作业三:抓老鼠,亏了还是赚了
  6. JQuery-Validate明明配置好了但是不生效?卡了2个小时的bug解决了,原因很简单。...
  7. 手眼标定eye-to-hand 示例:handeye_stationarycam_calibration
  8. 使用Huploadify上传文件并动态传递参数到后台
  9. 性能测试脚本之SQLServer执行语句
  10. MVC初学 - The type or namespace name 'DbContext' could not be found