`
yzjklove
  • 浏览: 63758 次
  • 性别: Icon_minigender_1
  • 来自: 广东省惠州市
社区版块
存档分类
最新评论

[Django学习]事务处理

阅读更多
[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 的使用真是方便啊。
  • 大小: 74.1 KB
分享到:
评论
1 楼 wl6179 2012-04-11  
谢谢,受教了!

相关推荐

    Django开发资源包

    学习Django时,了解最佳实践至关重要,例如如何组织项目结构、如何编写单元测试、如何优化性能以及如何处理并发和安全性问题。 这个资源包可能包含了这些概念的详细教程、示例代码、实战项目、文档和社区资源,...

    Django 2.2 官方文档中文版.pdf

    进一步地,文档详细介绍了Django的模型和数据库操作,包括模型的基本定义、数据库查询、聚合查询以及数据库事务的处理。对于那些需要对数据库进行更细粒度操作的开发者,文档还提供了使用原始SQL进行查询以及如何...

    Django框架学习指南

    - **高级主题**:包括管理器、原始 SQL、事务处理等。 - **其他**:支持的数据库、遗留数据库处理、提供初始数据以及优化数据库访问。 #### 五、模板层 模板层负责呈现数据,是前端开发人员关注的重点。 - **设计...

    Django中文手册

    通过这份手册的学习,开发者能够掌握Django框架的核心知识,并能够将其运用在实际的Web开发工作中。该手册还强调了框架的作用,通过不使用框架的示例来展示Django框架如何简化Python Web应用的开发过程。例如,使用...

    django源码

    源码中可以找到如何将Python对象与数据库表进行映射,以及如何执行查询和事务处理的相关实现。 3. **中间件(Middleware)**:Django的中间件是一系列处理请求和响应的组件,它们在视图层之前或之后运行。查看源码...

    Pro Django

    ### Pro Django:深入学习Django框架 #### 一、书籍概览 《Pro Django》是一本面向具有一定Python和Django基础的读者所编写的高级指南。本书旨在帮助读者掌握更深层次的技术细节,以及如何利用这些技术来实现更为...

    django1.8教程

    高级话题包括如何编写自定义SQL查询、使用事务、聚合数据,以及如何在Django中处理多数据库情况。同时,还介绍了Django支持的数据库类型,以及如何为遗留数据库系统提供支持。 视图层负责处理用户请求和返回响应...

    django学习文档

    4. **高级主题**:涉及管理者、原生SQL、事务处理、聚合查询、自定义字段以及多数据库支持等。 5. **其他**:包括支持的数据库类型、遗留数据库的支持、初始数据的提供以及优化数据库访问等。 #### 五、模板层 模板...

    django 1.3 官方手册

    - **后续阅读推荐**:推荐了一些进阶教程和技术文章,帮助开发者深入学习 Django。 #### 三、使用 Django - **安装指南**:提供了详细的 Django 安装步骤及注意事项。 - **模型与数据库**:详细解释了 Django ORM ...

    Django1.0以上版本的教材-DjangoBook2.0中文版.pdf

    继续深化对模型的理解,介绍了更复杂的数据库操作,如事务处理、自定义查询集等。 11. **通用视图(第十一章)** 介绍了Django提供的通用视图,这些视图可以简化常见的视图编写任务,提高开发效率。 12. **部署...

    基于python+Django的OA办公系统.zip

    - Django框架基础:如模型-视图-控制器(MVC)架构、模板系统、表单处理、用户认证与权限管理。 - Python编程:变量、数据类型、控制结构、函数、类和模块的使用。 - 数据库操作:通过Django ORM(对象关系映射)...

    django-docs-1.6文档API

    它可以处理数据库连接、事务、查询以及模型之间的关系。 **缓存系统** Django 的缓存框架允许你存储经常访问的数据,减少对数据库的依赖,提高应用性能。它支持多种缓存后端,如内存缓存、数据库缓存或分布式缓存。...

    Python基于Django图书管理系统.zip

    MySQL是一个广泛使用的开源关系型数据库,与Django有良好的集成,支持复杂的数据操作和事务处理。 4. **PythonProject**:这个文件夹可能包含了整个Django项目的源代码,包括settings.py(配置文件)、urls.py(URL...

    django 1.3 离线文档

    ### Django 1.3离线文档知识点概览 #### 一、获取帮助 ...以上是对Django 1.3离线文档的主要知识点的概述,这些内容涵盖了从入门到进阶的各个层面,对于学习和使用Django框架有着重要的参考价值。

    django 1.2.4

    标题:Django 1.2.4 - Python Django 开发手册 ### 知识点一:Django概览与设计理念 Django是一个基于Python的高级...通过深入学习这些内容,开发者可以充分利用Django的强大功能,构建出既高效又易于维护的Web应用。

    django开发中文版资料

    - **事务**:解释如何在Django中使用事务管理机制。 - **聚合**:介绍如何执行聚合查询。 - **多数据库**:讲解如何配置和使用多个数据库。 - **自定义查找**:指导如何添加自定义查找功能。 - **查询表达式**:解释...

    Django 3.2.10.dev 官方文档中文版.pdf

    此外,还有管理器、原始SQL、事务处理、聚合等功能的介绍。 视图层是处理用户请求并返回响应的部分。Django支持基于函数和基于类的视图,包括URL配置、视图装饰器、异步视图支持,以及文件上传和存储API。中间件则...

    python3 Django入门与实践

    随着章节的深入,读者可能还会学到关于“静态文件”和“中间件”的知识,前者用于管理网页中静态资源(如CSS、JavaScript文件和图片),后者则是Django请求/响应处理的钩子,可以用来处理各种跨请求的事务。...

    python+django+mysql web开发 入门图书管理系统

    它的特点是速度快、稳定性好、支持事务处理。在Django项目中,我们可以通过配置数据库设置来连接MySQL,用Python代码操作数据库。 **MTV框架**: - **模型(Model)**:模型定义了数据库中的数据结构。在Django中,...

    django架构学习

    17. 查询、排序综合成绩,并处理其他相关事务。 18. 了解各院系和班级的综合成绩情况。 19. 查看所有人的互评信息。 要搭建这个ComPerformance系统,需要按照以下步骤进行: 1. 下载项目的最新代码。 2. 在MySQL...

Global site tag (gtag.js) - Google Analytics