Django事务transaction的使用以及多个装饰器问题
目录
- Djangophp事务transaction使用及多个装饰器
- django事务类库:django.db.transaction
- atomic提供两种方案实现事务
- Django事务transaction.atomic
- 自定义事务处理
- 总结
Django事务transaction使用及多个装饰器
django编程事务类库:django.db.transaction
atomic提供装饰器用法当有多个装饰器时@transaction.atomic必须紧贴函数,如果其他装饰器紧贴函数虽不会报错但函数执行会出现问题
例:
#正确用法 from django.db import transaction @classmethod @transaction.atomic def func(request): ...... #错误用法 from django.db import transaction @transaction.atomic @classmethod def func(request): ......
atomic提供两种方案实现事务
1、装饰器用法:
from django.db import transaction @transaction.atomic def func(request): # 这些代码会在一个事务中执行 ......
装饰器用法:
- 整个视图中所有 mysql 数据库的操作都看做一个事务,范围太大,不够灵http://www.devze.com活。
- 而且无法直接作用于类视图
2、with 语句用法:
from django.db import transactionpython def func(request): # 这部分代码不在事务中,会被 Django 自动提交 ...... with transaction.atomic(): # 这部分代码会在事务中执行 ......
with 语句用法:
- 可以灵活的有选择性的把某些 MySQL 数据库的操作看做一个javascript事务。
- 而且不用关心视图的类型。
Django事务transaction.atomic
自定义事务处理
方法一:全局配置对一整个http请求内数据库操作进行事务管理
方法二:atomic 装饰器对整个view进行事务管理
方法三:atomic 对代码块进行事务管理
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
精彩评论