博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dajngo 数据库事物的处理
阅读量:6375 次
发布时间:2019-06-23

本文共 1364 字,大约阅读时间需要 4 分钟。

hot3.png

[Django学习]事务处理 

其实事务处理已经在 django 中提供了,但是很奇怪好象没有过多的“笔墨”来说明这个事。今天看了看,真是非常简单。具体的在 django 所带的 transaction 文档中。 
django对于事务的支持分几个层次。 
1. 什么都不管的话,它是使用 autocommit 方式。也就是在执行了 save() 或 delete() ,等修改数据库的语句之后就自动提交了。 
2. 通过增加 Transaction 中间件来实现自动的事务支持。我感觉这个是非常方便的做法。使用它,你首先需要在 settings.py 中增加一个中间件的设置: 
MIDDLEWARE_CLASSES = ( 
"django.middleware.common.CommonMiddleware", 
"django.middleware.sessions.SessionMiddleware", 
"django.middleware.cache.CacheMiddleware", 
"django.middleware.transaction.TransactionMiddleware", 
但要注意,这个设置与其它的中间件的顺序是有关的。所以置于 TransactionMiddleware 之后的中间件也将受事务的控制。因此,如果把 session 中间件放在 Transaction 之后,它也会受到影响。不过文档上说 Cache 没有关系,因为它使用自已内部的数据库处理。 
那么只要设置这个中间件之后,事务机制就自动生效了。你不需要在 View 代码中做特殊的处理。只要一个 View 在 Response 返回成功,事务就自动提交。一旦出现异常,事务就回滚。太方便了。因此 Woodlog 中我只加了这么个设置,其它的我都没有动。而且我测试了一下,故意引发一个异常,数据并没有真实插入
3. 自已来控制事务 
如果你不喜欢 django 为你实现的这种事务方式,你还可以自已来控制事务,这时你可以不安装 TransactionMiddleware中间件了。基本上都是通过 decorator 来实现的,即在每个View函数前加上decorator的修饰。比如: 
@transaction.autocommit 
就是实现了缺省状态的事务处理,即碰上 save() 或 delete() 就自动提交。 
@transaction.commit_on_success 
当整个view成功后提交事务,否则回滚,这与 TransactionMiddleware提供的方式是一样的。 
@transaction.commit_manually 
这是最手动的方式。你需要显示地调用commit或rollback。 
具体的例子参见 Transaction 文档。 
同时 Django 可以允许你在 settings.py 设置 DISABLE_TRANSACTION_MANAGEMENT 为 True 来禁止事务处理。这样在你需要时你可以自已来进行控制事务。 
感觉 TransactionMiddleware 的使用真是方便啊。

转载于:https://my.oschina.net/012345678/blog/195338

你可能感兴趣的文章
TCP连接中time_wait在开发中的影响-搜人以鱼不如授之以渔
查看>>
Oracle数据库机出新帮助不同规模企业迈向云端
查看>>
前端通信:ajax设计方案(六)--- 全局配置、请求格式拓展和优化、请求二进制类型、浏览器错误搜集以及npm打包发布...
查看>>
Android捕获监听Home键、最近任务列表键
查看>>
微服务分布式企业框架 Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis+KafKa
查看>>
word2vec原理(三) 基于Negative Sampling的模型
查看>>
被《时代周刊》选为年度最佳发明,PS VR靠的竟然是价格
查看>>
通用唯一标识码UUID的介绍及使用。
查看>>
spring笔记--依赖注入之针对不同类型变量的几种注入方式
查看>>
Java爬虫——网易云热评爬取
查看>>
Ajax的简单学习
查看>>
无华为,不智慧:智慧城市建设为何少不了华为?
查看>>
高性能网络通信框架Netty-基础概念篇
查看>>
为npm配置taobao源
查看>>
orm框架(SQLAlchemy) 连接数据库和创建表
查看>>
OSPF多区域虚电路配置
查看>>
zookeeper初探三 java客户端连接
查看>>
管理邮件用户
查看>>
Python中的运算符、数据类型、字符串及列表操作举例
查看>>
Tab页界面之二,jQuery技术实现
查看>>