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 事务处理

django对于事务的支持分几个层次。 1. 什么都不管的话,它是使用 autocommit 方式。也就是在执行了 save() 或 delete() 之后就自动提交了。  2. 通过增加 Tra...
  • qiaojun_peng
  • qiaojun_peng
  • 2013年12月23日 15:39
  • 1220

django对事务的处理

Django默认的事务行为 默认情况下,在Django中事务是自动提交的。当我们运行Django内置的模板修改函数时,例如调用model.save()或model.delete()时,事务将被立即提...
  • Mrjiajia
  • Mrjiajia
  • 2015年08月17日 09:21
  • 901

django多数据库事务处理

@transaction.commit_manually(using='other_db') @transaction.commit_manually def test(request): ...
  • shellshine
  • shellshine
  • 2012年07月31日 16:23
  • 1626

初学JDBC(八)-JDBC的事务处理

上一篇博客讲了CallableStatement接口调用存储过程,这一篇博客我来说说JDBC的事务处理,这在以后的项目开发中也很重要,只有充分地考虑好JDBC的事务处理,才能在项目开发中遇到前台与后台...
  • u013132035
  • u013132035
  • 2016年11月22日 23:40
  • 256

数据库事务处理机制

使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTrans...
  • u013588712
  • u013588712
  • 2016年06月08日 16:24
  • 1906

详解EBS接口开发之库存事务处理-物料批次导入

库存事务处理-物料批次导入 --系统批次表 SELECT * FROM MTL_LOT_NUMBERS T; --API创建批次 inv_lot_api_pub.create_inv_lot(x_re...
  • caixingyun
  • caixingyun
  • 2013年12月04日 23:20
  • 3099

spring事务处理详解

1:Java包含两种异常:checked异常和unchecked异常。checked和unchecked异常之间的区别是: Checked异常必须被显式地捕获try-catch-finally,而u...
  • u013628152
  • u013628152
  • 2015年08月25日 18:02
  • 4112

MySQL事务处理实现方法步骤

需求说明:  案例背景:银行的转账过程中,发生意外是在所难免。为了避免意外而造成不必要的损失,使用事务处理的方式进行处理: A账户现有余额1000元,向余额为200的B账户进行转账500元。可能由于某...
  • hello_zhou
  • hello_zhou
  • 2016年07月09日 12:39
  • 7718

Oracle EBS 物料事务处理未产生会计分录

来自:http://hi.erp100.com/home.php?mod=space&uid=218904&do=blog&id=13577369 月初,财务关会计期的时候,发现库存会计...
  • zhanzhib
  • zhanzhib
  • 2014年12月04日 16:08
  • 2468

WIP 完工事务处理Demo

DECLARE l_itface_move_rec wip_move_txn_interface%ROWTYPE; l_itface_cst_rec cst_comp_snap_in...
  • chosen1brain
  • chosen1brain
  • 2014年08月08日 10:56
  • 546
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Django事务处理
举报原因:
原因补充:

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