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 ...
随机推荐
- SVN checkout 功能不可用 右键只看到提交和更新,没有显示checkout
不要在受SVN控制的文件夹里点右键,因为这个文件夹已经在SVN控制之下,当然不会允许在里面嵌套另一个SVN版本库换个不受控的文件夹点右键,比如D盘根目录
- zookeeper安装笔记
安装zookeeper,将zookeeper上传到三个服务器,保存在/usr/local/zookeeper目录下,解压tar包 tar -xzvf zookeeper-3.4.6.tar.gz 进入 ...
- Map根据value排序
网上找到的资源, package com.test.ch1; import java.util.ArrayList; import java.util.Collections; import java ...
- 个人博客开发之 ueditor 安装
- C语言 结构体(嵌套结构体--结构体数组)
//结构体--嵌套结构体和结构体数组 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> ...
- Servlet 客户端 HTTP 请求
当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的.您可以查看 HTTP 协议 了解更多相关信息. 以下是来自于浏 ...
- oracle定时job
转载自:http://www.cnblogs.com/hoojo/p/oracle_procedure_job_interval.html Oracle job procedure 存储过程定时任务 ...
- WPF的本质:数据和行为
如果自己来做一个UI框架,我们会首先关注哪些方面?我想UI框架主要处理的一定包括两个主要层次的内容,一个是数据展现,另一个就是数据操作,所以UI框架必须能够接收各种不同的数据并通过UI界面展现出来,然 ...
- 圆角头像----CSS3特效
w3c:http://www.w3school.com.cn/cssref/pr_border-radius.asp 定义和用法 border-radius 属性是一个简写属性,用于设置四个 bord ...
- C++ 虚析构(virtual destructor)原理
注意:本文仅为个人理解,可能有误! 先看一段代码: #include <iostream> using namespace std; class CBase{ public: CBase( ...