Django事务处理

转载 2012年03月26日 18:46:50

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 返回成功,事务就自动提交。一旦出现异常,事务就回滚。太方便了。

3. 自已来控制事务

如果你不喜欢 django 为你实现的这种事务方式,你还可以自已来控制事务,这时你可以不安装 TransactionMiddleware中间件了。基本上都是通过 decorator 来实现的,即在每个View函数前加上decorator的修饰。比如:

@transaction.autocommit
就是实现了缺省状态的事务处理,即碰上 save() 或 delete() 就自动提交。
@transaction.commit_on_success
当整个view成功后提交事务,否则回滚,这与 TransactionMiddleware提供的方式是一样的。
@transaction.commit_manually
这是最手动的方式。你需要显示地调用commit或rollback。
具体的例子参见 Transaction 文档。

此种方式需要引用transaction
即from django.db import transaction


django-mysql 中的金钱计算事务处理

原文:http://ichuan.net/post/60/django-mysql-decimal-transaction/ 问题 在类银行系统中,涉及金钱计算的地方,不能使用...
  • heybob
  • heybob
  • 2015年07月27日 16:52
  • 680

大规模SOA系统的分布式事务处理

  • 2017年11月16日 17:10
  • 5.97MB
  • 下载

spring事务处理

  • 2016年05月30日 15:21
  • 1.67MB
  • 下载

Yii 1.0数据库操作 查询、增加、更新、删除(事务处理)

http://blog.sina.com.cn/s/blog_66ac09390102vkpd.html 1、根据条件查询一个集合 $objectResult=Post::model()->fi...
  • wzm112
  • wzm112
  • 2016年01月07日 12:07
  • 821

spring整合hibernate实现事务处理

  • 2015年01月27日 18:55
  • 19KB
  • 下载

oracle事务处理

  • 2014年12月29日 15:53
  • 87KB
  • 下载

JDBC:数据库事务处理

•在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。 •为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的一致性可以保持,而当这个单元中...

oracel 事务处理

  • 2014年05月22日 17:16
  • 962KB
  • 下载

C# 事务处理机制

  • 2010年09月08日 18:33
  • 152KB
  • 下载

Java事务处理全解析(四)—— 成功的案例(自己实现一个线程安全的TransactionManager)

在本系列的上一篇文章中我们讲到,要实现在同一个事务中使用相同的Connection对象,我们可以通过传递Connection对象的方式达到共享的目的,但是这种做法是丑陋的。在本篇文章中,我们将引入另外...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Django事务处理
举报原因:
原因补充:

(最多只允许输入30个字)