django中实现事务的几种方式
https://zhuanlan.zhihu.com/p/622987268
具体表现形式为:每次数据库操作(比如调用save()方法)会立即被提交到数据库中。
但是如果你希望把连续的SQL操作包裹在一个事务里,就需要手动开启事务
根据粒度不同,三种
全局:
全局,每次请求在一个事务中,粒度太大,事务时间很长
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'llll', 'HOST': '127.0.0.1', 'PORT': '3306', 'USER': 'llll', 'PASSWORD': '123', #全局开启事务,绑定的是http请求响应整个过程 'ATOMIC_REQUESTS': True, } }
局部禁用全局事务
from django.db import transaction
多数据库,用default的视图不受事务控制
@transaction.non_atomic_requests(using='default') def seckill(request): return HttpResponse('秒杀成功')
视图开启事务
# fbv开启 from django.db import transaction @transaction.atomic def seckill(request): return HttpResponse('秒杀成功') # cbv开启 from django.db import transaction from rest_framework.views import APIView class SeckillAPIView(APIView): @transaction.atomic def post(self, request): pass
################ 局部使用事务##################### from django.db import transaction def seckill(request): with transaction.atomic(): save() update() return HttpResponse('秒杀成功')
标签:事务,transaction,db,几种,atomic,import,django From: https://www.cnblogs.com/YeeQX/p/17865954.html