事务回滚
#0 GitHub
代码语言:javascript复制https://github.com/Coxhuang/django-transaction.git
#1 环境
代码语言:javascript复制Python3.6
Django==2.0.6
#2 需求
- 用户的数据包括基本资料表A,特殊资料表B;在新增用户时,需要对表A和表B进行操作,如果A添加数据成功,但是B添加数据失败,此时,我们希望A的数据也被删除
- 在支付的时候,如果支付中发生异常,那么异常之前的操作,我们也希望回到原始状态
#3 事务回滚
事务回滚就是在操作数据库时,如果发生异常,能让数据回到原来的状态
#4 使用
#4.1 新建一个django项目
没有使用事务回滚
代码语言:javascript复制def new_stu(request):
models.Student.objects.create(name="cox_raise")
raise Http404("异常")
return HttpResponse("success")
使用事务回滚,但没有发生异常
代码语言:javascript复制from django.db import transaction
def new_stu(request):
with transaction.atomic(): # 事务回滚
models.Student.objects.create(name="cox2")
return HttpResponse("success")
使用事务回滚,发生异常
代码语言:javascript复制from django.db import transaction
def new_stu(request):
with transaction.atomic(): # 事务回滚
models.Student.objects.create(name="cox_404")
raise Http404("异常")
return HttpResponse("success")
并没有生成数据