[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
分享到:
相关推荐
学习Django时,了解最佳实践至关重要,例如如何组织项目结构、如何编写单元测试、如何优化性能以及如何处理并发和安全性问题。 这个资源包可能包含了这些概念的详细教程、示例代码、实战项目、文档和社区资源,...
进一步地,文档详细介绍了Django的模型和数据库操作,包括模型的基本定义、数据库查询、聚合查询以及数据库事务的处理。对于那些需要对数据库进行更细粒度操作的开发者,文档还提供了使用原始SQL进行查询以及如何...
- **高级主题**:包括管理器、原始 SQL、事务处理等。 - **其他**:支持的数据库、遗留数据库处理、提供初始数据以及优化数据库访问。 #### 五、模板层 模板层负责呈现数据,是前端开发人员关注的重点。 - **设计...
通过这份手册的学习,开发者能够掌握Django框架的核心知识,并能够将其运用在实际的Web开发工作中。该手册还强调了框架的作用,通过不使用框架的示例来展示Django框架如何简化Python Web应用的开发过程。例如,使用...
源码中可以找到如何将Python对象与数据库表进行映射,以及如何执行查询和事务处理的相关实现。 3. **中间件(Middleware)**:Django的中间件是一系列处理请求和响应的组件,它们在视图层之前或之后运行。查看源码...
### Pro Django:深入学习Django框架 #### 一、书籍概览 《Pro Django》是一本面向具有一定Python和Django基础的读者所编写的高级指南。本书旨在帮助读者掌握更深层次的技术细节,以及如何利用这些技术来实现更为...
高级话题包括如何编写自定义SQL查询、使用事务、聚合数据,以及如何在Django中处理多数据库情况。同时,还介绍了Django支持的数据库类型,以及如何为遗留数据库系统提供支持。 视图层负责处理用户请求和返回响应...
4. **高级主题**:涉及管理者、原生SQL、事务处理、聚合查询、自定义字段以及多数据库支持等。 5. **其他**:包括支持的数据库类型、遗留数据库的支持、初始数据的提供以及优化数据库访问等。 #### 五、模板层 模板...
- **后续阅读推荐**:推荐了一些进阶教程和技术文章,帮助开发者深入学习 Django。 #### 三、使用 Django - **安装指南**:提供了详细的 Django 安装步骤及注意事项。 - **模型与数据库**:详细解释了 Django ORM ...
继续深化对模型的理解,介绍了更复杂的数据库操作,如事务处理、自定义查询集等。 11. **通用视图(第十一章)** 介绍了Django提供的通用视图,这些视图可以简化常见的视图编写任务,提高开发效率。 12. **部署...
- Django框架基础:如模型-视图-控制器(MVC)架构、模板系统、表单处理、用户认证与权限管理。 - Python编程:变量、数据类型、控制结构、函数、类和模块的使用。 - 数据库操作:通过Django ORM(对象关系映射)...
它可以处理数据库连接、事务、查询以及模型之间的关系。 **缓存系统** Django 的缓存框架允许你存储经常访问的数据,减少对数据库的依赖,提高应用性能。它支持多种缓存后端,如内存缓存、数据库缓存或分布式缓存。...
MySQL是一个广泛使用的开源关系型数据库,与Django有良好的集成,支持复杂的数据操作和事务处理。 4. **PythonProject**:这个文件夹可能包含了整个Django项目的源代码,包括settings.py(配置文件)、urls.py(URL...
### Django 1.3离线文档知识点概览 #### 一、获取帮助 ...以上是对Django 1.3离线文档的主要知识点的概述,这些内容涵盖了从入门到进阶的各个层面,对于学习和使用Django框架有着重要的参考价值。
标题:Django 1.2.4 - Python Django 开发手册 ### 知识点一:Django概览与设计理念 Django是一个基于Python的高级...通过深入学习这些内容,开发者可以充分利用Django的强大功能,构建出既高效又易于维护的Web应用。
- **事务**:解释如何在Django中使用事务管理机制。 - **聚合**:介绍如何执行聚合查询。 - **多数据库**:讲解如何配置和使用多个数据库。 - **自定义查找**:指导如何添加自定义查找功能。 - **查询表达式**:解释...
此外,还有管理器、原始SQL、事务处理、聚合等功能的介绍。 视图层是处理用户请求并返回响应的部分。Django支持基于函数和基于类的视图,包括URL配置、视图装饰器、异步视图支持,以及文件上传和存储API。中间件则...
随着章节的深入,读者可能还会学到关于“静态文件”和“中间件”的知识,前者用于管理网页中静态资源(如CSS、JavaScript文件和图片),后者则是Django请求/响应处理的钩子,可以用来处理各种跨请求的事务。...
它的特点是速度快、稳定性好、支持事务处理。在Django项目中,我们可以通过配置数据库设置来连接MySQL,用Python代码操作数据库。 **MTV框架**: - **模型(Model)**:模型定义了数据库中的数据结构。在Django中,...
17. 查询、排序综合成绩,并处理其他相关事务。 18. 了解各院系和班级的综合成绩情况。 19. 查看所有人的互评信息。 要搭建这个ComPerformance系统,需要按照以下步骤进行: 1. 下载项目的最新代码。 2. 在MySQL...