当前位置: 首页 > news >正文

中文网站建设公司排名企业网站设计调查问卷

中文网站建设公司排名,企业网站设计调查问卷,网站备案关站,用python开发网站开发技术Django 默认的事务行为是自动提交,除非事务正在执行,否则每个查询将会马上自动提交到数据库。 1. 全局开启事务 在 Web 里,处理事务比较常用的方式是将每个请求封装在一个事务中。 在你想启用该行为的数据库中,把 settings 配置…

Django 默认的事务行为是自动提交,除非事务正在执行,否则每个查询将会马上自动提交到数据库。

1. 全局开启事务

在 Web 里,处理事务比较常用的方式是将每个请求封装在一个事务中。 在你想启用该行为的数据库中,把 settings 配置数据库中的参数 ATOMIC_REQUESTS 设置为 True。

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 装饰器让某些视图方法不受事务控制,但需要注意的是,该装饰器仅作用于视图本身时才会生效,在DRF的viewset中不生效。

from django.db import transaction@transaction.non_atomic_requests
def trans2():valid_data_test = {'gender': "male", 'birth': '2020-10-01', 'tele': 18812341234, 'addr': '南京市雨花台区'}res_test = AuthorDetail.objects.create(**valid_data_test)res_test += 1return Response(status=HTTP_202_ACCEPTED, data={"msg": "insert success"})视图请求trans2被 @transaction.non_atomic_requests 装饰,不受全局事务配置的控制。
class AuthorViewSet(viewsets.ModelViewSet):serializer_class = AuthorDetailSerializer@transaction.non_atomic_requests@action(methods='post', detail=False)def trans(self, request):serializer = self.get_serializer(data=request.data)if serializer.is_valid(raise_exception=True):valid_data = serializer.validated_dataAuthorDetail.objects.create(**valid_data)return Response(status=HTTP_202_ACCEPTED, data={"msg": "insert success"})DRF的视图函数即使被 @transaction.non_atomic_requests 装饰,但是依旧被全局事务配置所控制,所以说 non_atomic_requests 仅作用于视图本身时才会生效。

2 局部开启事务

Django项目中局部开启事务,可以借助于transaction.atomic方法。使用它我们就可以创建一个具备原子性的代码块,一旦代码块正常运行完毕,所有的修改会被提交到数据库。反之,如果有异常,更改会被回滚。

两种方式对某个请求使用事务:

class AuthorViewSet(viewsets.ModelViewSet):serializer_class = AuthorDetailSerializer@transaction.atomic@action(methods='post', detail=False)def trans(self, request):serializer = self.get_serializer(data=request.data)if serializer.is_valid(raise_exception=True):valid_data = serializer.validated_dataAuthorDetail.objects.create(**valid_data)return Response(status=HTTP_202_ACCEPTED, data={"msg": "insert success"})@transaction.atomic
def trans2():valid_data_test = {'gender': "male", 'birth': '2020-10-01', 'tele': 18812341234, 'addr': '南京市雨花台区'}res_test = AuthorDetail.objects.create(**valid_data_test)res_test += 1return Response(status=HTTP_202_ACCEPTED, data={"msg": "insert success"})

对请求中的某个代码块使用事务:

with transaction.atomic():AuthorDetail.objects.create(**valid_data_test)

3. 显式开启保存点

在事务操作中,我们还会经常显式地设置保存点(savepoint)。一旦发生异常或错误,我们使用savepoint_rollback方法让程序回滚到指定的保存点。如果没有问题,就使用savepoint_commit方法提交事务。

class AuthorDetailViewSet(viewsets.ModelViewSet):serializer_class = AuthorDetailSerializerqueryset = AuthorDetail.objects.all()@action(methods=["post"], detail=False)          # detail=False or True: True: 系统会自动在生成的路由中添加pk值def trans(self, request):serializer = self.get_serializer(data=request.data)if serializer.is_valid(raise_exception=True):valid_data = serializer.validated_dataAuthorDetail.objects.create(**valid_data)valid_data_test = {'gender': "male", 'birthday': '2020-10-01', 'telephone': 18812341234, 'addr': '南京市雨花台区'}valid_data_test2 = {'gender': "male", 'birthday': '2020-10-02', 'telephone': 18812341234, 'addr': '南京市雨花台区'}with transaction.atomic():AuthorDetail.objects.create(**valid_data_test)sid = transaction.savepoint()try:res_test2 = AuthorDetail.objects.create(**valid_data_test2)res_test2 += 1except Exception:transaction.savepoint_rollback(sid)print("error and rollback")transaction.savepoint_commit(sid)print("commit success")return Response(status=HTTP_202_ACCEPTED, data={"msg": "insert success"})

4. 事务嵌套

事务嵌套,只有内外两层的事务都执行成功,那么事务才能最终被成功提交。如果内层事务执行失败,那么外层的事务也会失败,事务最终会提交失败。

class AuthorDetailViewSet(viewsets.ModelViewSet):serializer_class = AuthorDetailSerializerqueryset = AuthorDetail.objects.all()@transaction.atomic		# 外层事务的执行成功与否,除了它本身外,还依赖于内层事务执行成功与否。@action(methods=["post"], detail=False)          # detail=False or True: True: 系统会自动在生成的路由中添加pk值def trans(self, request):serializer = self.get_serializer(data=request.data)if serializer.is_valid(raise_exception=True):valid_data = serializer.validated_dataAuthorDetail.objects.create(**valid_data)	# 记录1valid_data_test = {'gender': "male", 'birthday': '2020-10-01', 'telephone': 18812341234, 'addr': '南京市雨花台区'}with transaction.atomic():		# 故意让内层的事务执行失败res_test = AuthorDetail.objects.create(**valid_data_test)	# 记录2res_test += 1	return Response(status=HTTP_202_ACCEPTED, data={"msg": "insert success"})最终,我们查得数据库的记录1和记录2都没有入库。
http://www.yayakq.cn/news/937646/

相关文章:

  • ppt模板下载网站有哪些wordpress能大网站
  • 免费网站制作在线饶平网站建设
  • 后台管理页面模板丰台网站关键词优化
  • 做软文的网站python网站入口
  • 汕头网站优化哪家好做网站 二维码登录
  • 做网站淘宝条形码wordpress添加主题设置页面
  • 长沙php的网站建设公司张启亚学做网站
  • 网站优化建设郑州wordpress 首页 缩略图
  • 高端网站的特点央视新闻的新闻
  • 做企业网站怎样做网站计算机速成培训班
  • 长春市建设技工学校网站手工制作过程
  • 企业网站做备案张槎建网站
  • 全屏的网站济南建筑公司排名
  • 沈阳网站制作招聘网高质量发展服务业
  • 收录查询 站长工具开店做网站有什么好处
  • 异地备案 网站WordPress禁用f12
  • 网站建设九亭网创项目平台
  • 做杂志的模板下载网站创建自己的网站有什么用
  • 辽宁网站建设公司电话计算机培训班价格
  • centos 网站开发工具黄骅住房和城乡建设局网站
  • 专门做五金的网站soso搜搜
  • 律师事务所网站建设网站建设验收使用情况
  • 网站建立的方式是什么宁波网站建设企业网站制作
  • 如何建设一个双语的网站wordpress用什么写的
  • 网站敏感目录漏洞修复比亚迪新能源汽车车型
  • 接做网站需要问什么软件在线写作网站
  • 淘宝做推广网站百度应用商店
  • 400网站推广电子商务网站系统建设进度安排
  • 徐州专业三合一网站开发wordpress静态连接选择
  • 宿州哪有做网站的wordpress 4.8上传漏洞