Django事务transaction的使用以及多个装饰器问题
作者:Lei Gong
这篇文章主要介绍了Django事务transaction的使用以及多个装饰器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
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 数据库的操作都看做一个事务,范围太大,不够灵活。
- 而且无法直接作用于类视图
2、with 语句用法:
from django.db import transaction def func(request): # 这部分代码不在事务中,会被 Django 自动提交 ...... with transaction.atomic(): # 这部分代码会在事务中执行 ......
with 语句用法:
- 可以灵活的有选择性的把某些 MySQL 数据库的操作看做一个事务。
- 而且不用关心视图的类型。
Django事务transaction.atomic
自定义事务处理
方法一:全局配置对一整个http请求内数据库操作进行事务管理
方法二:atomic 装饰器对整个view进行事务管理
方法三:atomic 对代码块进行事务管理
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。