事务实现方式
1:基于装饰器实现
@transaction.atomic
def my_view(request):
#处理操作
#操作数据1
#操作数据2
当HTTP相应码是500,事务回滚
2:使用with语句
from django.db import transaction
def my_view(request):
with transaction.atomic()
#处理操作
#操作数据1
#操作数据2
3:手动处理
from django.db import connection
connection.set_autocommit(False)
try:
#处理操作
#操作数据1
#操作数据2
connection.commit()
except Exception as e :
#print("errorrrrrrrr",str(e))
connection.rollback()
finally:
connection.set_autocommit(True)
4:全局事务配置文件方式
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'testdb',
'USER': 'root',
'PASSWORD': '123',
'HOST': '127.0.0.1',
'PORT': 3306,
'ATOMIC_REQUESTS': True # 全局开启事务,和http请求的整个过程绑定在一起
}
}
它是这样工作的:在调用视图方法前,Django 先生成一个事务。如果响应能正常生成,Django 会提交该事务。而如果视图出现异常,Django 则会回滚该事务。
如果你全局开启了事务,你仍然可以使用 non_atomic_requests 装饰器让某些视图方法不受事务控制,但需要注意的是,该装饰器