django事物回滚
往数据库写入数据时,不经意间就会写入不完整的数据,我们称之为脏数据。事务管理(transaction)可以防止这种情况发生。事务管理一旦检测到写入异常,会执行回滚操作,即要么写入完整的数据,要么不写入。在Django中使用事务很简单:
1.新建项目Transaction,创建应用app01,编辑models创建两张表并执行数据库迁移,如下:
from django.db import models class 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 views urlpatterns = [
url(r'^test/$', views.test),
]
3.定义test视图函数;
from django.shortcuts import render, HttpResponse
from . import models def 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事物回滚的更多相关文章
- msql,触发器无事物回滚,插入之前满足条件再插入
很少写mysql的触发器和存储过程,由于需要需要做一个很小的判断,要用到触发器,要达到的效果就是,插入之前判断是否满足条件如果不满足就不插入 如果用sqlserver 或者orcale 就很简单,按s ...
- 复习课程jdbc:使用配置文件properties进行连接数据库,数据库存取图片,批处理,时间戳,事物回滚等等
使用配置文件properties进行连接数据库 首先创建一个file自定义文件名,但是后缀名必须改为.properties(不分大小写):如config.properties: 然后双击config. ...
- Spring aop切面插入事物回滚
<!-- tx标签配置 事物--> <tx:advice id="txadvice" transaction-manager="transactionM ...
- springboot事物回滚
要添加事物 必须在方法上添加 @Transactional 注解 如果需要事物回滚有两个条件 1.方法中有异常或者主动抛异常 2.主动去回滚 TransactionAspectSupport.curr ...
- peewee 事物 回滚
peewee 事物 回滚 #!/usr/bin/env python # coding=utf-8 from peewee import * db = MySQLDatabase(host='123. ...
- C#里面的事物回滚,解决同步数据插入时出现重复数据
什么是事物回滚: 举个栗子,你在你家的银行分行取钱,取完钱数据要同步,而且可能每个分行都有一个存储这些数据的数据库,分行的这些 存取的记录都需要实时同步,如果你取完500刚好断电了,好嘛,分行可能刚记 ...
- Spring-Java事物回滚失效处理
spring-Java事物回滚失效处理最近在做项目中,无意间发现有个类在抛事物回滚操作,数据也正常的插入到数据库当中了,于是仔细查看看一下具体原因. 一切还是要从Java的检查型异常和非检查型异常说起 ...
- ThinkPHP数据库驱动之mysql事物回滚
1.开启事务方法 startTrans()2.事务提交方法 commit()3.事务回滚方法 rollback() 用法例子: $order = M(‘order’); $allAdded = tru ...
- php数据访问:pdo用法、事物回滚功能和放sql注入功能
PDO: 一.含义: 数据访问抽象层 二.作用 通过PDO能够访问其它的数据库 三. 用法: 1.造对象 ① $pdo ...
随机推荐
- Pycharm快捷键小结
1.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性)Ctrl + Alt + Space 快速导入任意类Ctrl + Shift + Enter 语句完成Ctrl + ...
- html-解决乱码问题
1.创建HTML时,需将文件编码设置为UTF-8: 2.需要在<head>元素下,借用<meta>元素设置内容的编码: 1)文件的编码:在webstorm中设置文件编码的问题: ...
- c++ 如何使用第三方的library
感谢以下参考资料: 关于如何使用第三方的库: http://stackoverflow.com/questions/21942545/how-to-install-third-party-librar ...
- 前端js文件添加版本号
客户端会缓存这些css或js文件,因此每次升级了js或css文件后,改变版本号,客户端浏览器就会重新下载新的js或css文件 ,刷性缓存的作用.大家可能有时候发现修改了样式或者js,刷新的时候不变,就 ...
- 【原创】菜鸟版Android 笔记1- Android架构和Application
Android架构 图1 Android架构自上而下名称为应用层.应用框架层.运行库和Adroid虚拟机层. Linux内核层. 1. 应用层 应用层像一座大厦里面的砖瓦.我们所做的开发基本上都在应用 ...
- 开源播放器ijkplayer源码结构
ijkplayer核心源码主要在ijkmedia文件夹下ijkplayer.ijksdl及ijkutils. 注:tag k0.3.1 player: remove ijkutil android相关 ...
- html 常用
1. var canvas = document.getElementById("tutorial"); var ctx = canvas.getContext("2d& ...
- 【转】Monkey测试2——Monkey测试策略
Monkey的测试策略 一. 分类 Monkey测试针对不同的对象和不同的目的采用不同的测试方案,首先测试的对象.目的及类型如下: 测试的类型分为:应用程序的稳定性测试和压力测试 测试对象分为:单一a ...
- 在Xcode中使用Git进行源码版本控制(转)
http://www.cocoachina.com/ios/20140524/8536.html
- 大话DFT频谱分析(并不是我的话)
有限长信号DFT结果的频谱泄露 提出问题 依照我们在"信号与系统"这门课建立的印象,不管如何频率的连续正弦信号,其频谱应当是两根笔直的谱线(含负频率) 但是,当我们把一段正弦信号採 ...