iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么在Django中使用transaction管理事务
  • 842
分享到

怎么在Django中使用transaction管理事务

2023-06-14 20:06:49 842人浏览 八月长安
摘要

本篇文章给大家分享的是有关怎么在Django中使用transaction管理事务,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. transaction事务内不执行数据库的c

本篇文章给大家分享的是有关怎么在Django中使用transaction管理事务,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

1. transaction事务内不执行数据库的commit操作

除非手动commit

transaction最基本的功能。

代码场景:

在事务当前启动celery异步任务, 无法获取未提交的改动。

def example_view(request):    with transaction.atomic():        change_obj() # 修改对象变量        obj.save()        async_task.delay(obj.id)def async_task(obj_id):    obj = Model.objects.get(pk=obj_id)    read_the_obj() # 读取对象信息

在使用transaction当中, Model.save()都不做commit,因此如果在transaction当中设置异步任务,使用get()查询数据库,将看不到对象在事务当中的改变.这也是实现”可重复读”的事务隔离级别,即同一个事务里面的多次查询都应该保持结果不变。

2.transaction只对数据库层的操作进行事务管理

不能理解为python操作的事务管理

代码如下:

def example_view(request):    tag = False    with transaction.atomic():        tag = True        change_obj() # 修改对象变量        obj.save()        raise DataError    print("tag = ",tag)
tag = True #输出内容

即使事务代码块发生了DataError,事务回滚,也仅是数据库层面的回滚,针对Python的操作依然已完成。

甚至是对Model.Object进行的操作会也会存在变量当中。

如:

def example_view(request):    obj.changed = False    with transaction.atomic():        obj.changed = True        change_obj() # 修改对象其他变量        obj.save()        raise DataError    print("obj.changed = ",obj.changed)
obj.changed = True #输出内容

发生Dataerror异常的回滚仅在数据库层面操作,因此不可以根据model object的属性值判断是否正确完成了事务。

另外,虽然DjanGo对数据库层面以ORM完成了很具体的抽象,但应该要清楚地意识到我们操作的model object和数据库内容本质不同,DJANGO只在查询和提交时进行数据库操作。

补充:Django 事务transaction.atomic()的使用方法

看代码吧~

from django.shortcuts import renderfrom django.Http import HttpResponsefrom django.views.generic import Viewfrom django.db import transaction   # 导入事务  # 类视图 (事务,@transaction.atomic装饰器)class MyView(View):     @transaction.atomic    # transaction.atomic装饰器可以保证该函数中所有的数据库操作都在一个事务中。    def post(self, request):         # 数据库操作1。。。        # 数据库操作2。。。                return HttpResponse('ok')  # 类视图 (事务,保存点的使用)class MyView2(View):    @transaction.atomic    def post(self, request):         # 设置事务保存点        s1 = transaction.savepoint()   # 可以设置多个保存点         # 数据库操作。。。         # 事务回滚 (如果发生异常,就回滚事务)        transaction.savepoint_rollback(s1)  # 可以回滚到指定的保存点         # 提交事务 (如果没有异常,就提交事务)        transaction.savepoint_commit(s1)         # 返回应答        return HttpResponse('ok')

以上就是怎么在Django中使用transaction管理事务,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 怎么在Django中使用transaction管理事务

本文链接: https://www.lsjlt.com/news/274623.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在Django中使用transaction管理事务
    本篇文章给大家分享的是有关怎么在Django中使用transaction管理事务,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. transaction事务内不执行数据库的c...
    99+
    2023-06-14
  • 解决Django transaction进行事务管理踩过的坑
    概要 Transaction是django进行数据库原子性操作在python层面上的实现。 简单来说, 被transaction.atomic()包裹的代码块只在代码块顺利完成后进行...
    99+
    2024-04-02
  • 事务处理函数transaction与executeSQL怎么用
    今天小编给大家分享一下事务处理函数transaction与executeSQL怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文...
    99+
    2024-04-02
  • 如何在java中使用Connection管理事务
    本篇文章给大家分享的是有关如何在java中使用Connection管理事务,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java的优点是什么1. 简单,只需理解基本的概念,就可...
    99+
    2023-06-14
  • Spring事务管理怎么正确使用
    这篇文章主要介绍“Spring事务管理怎么正确使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring事务管理怎么正确使用”文章能帮助大家解决问题。事务(Transaction)是访问数据库的...
    99+
    2023-07-05
  • 如何在Spring中使用声明式事务管理
    本篇文章为大家展示了如何在Spring中使用声明式事务管理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。基于TransactionProxyFactoryBean的事务管理配置Spring中配置AO...
    99+
    2023-05-31
    spring 声明式事务管理
  • Spring中怎么管理事务
    今天小编给大家分享一下Spring中怎么管理事务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是事务一个数据库事务是一个...
    99+
    2023-07-02
  • 怎么理解PostgreSQL事务管理中的子事务
    本篇内容主要讲解“怎么理解PostgreSQL事务管理中的子事务”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解PostgreSQL事务管理中的子事务”吧...
    99+
    2024-04-02
  • SSM怎么实现在Controller中添加事务管理
    这篇文章主要介绍“SSM怎么实现在Controller中添加事务管理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SSM怎么实现在Controller中添加事务管理”文章能帮助大家解决问题。SSM在...
    99+
    2023-06-29
  • java中transaction参数怎么使用
    在Java中,可以使用`@Transactional`注解来指定事务的属性。`@Transactional`注解可以应用于类级别或方...
    99+
    2023-09-23
    java
  • PostgreSQL怎么管理事务
    在 PostgreSQL 中,可以通过以下方法来管理事务: 开始事务:使用 BEGIN 或 START TRANSACTION ...
    99+
    2024-04-09
    PostgreSQL
  • MySQL中怎么进行事务管理
    在MySQL中,可以通过以下方式进行事务管理: 开启事务:使用START TRANSACTION语句或BEGIN语句开启一个新的...
    99+
    2024-04-09
    MySQL
  • 怎么使用SQL事务管理器创建新表
    这篇文章主要讲解了“怎么使用SQL事务管理器创建新表”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用SQL事务管理器创建新表”吧!使用SQL事务管理器...
    99+
    2024-04-02
  • Entity Framework怎么使用Code First模式管理事务
    今天小编给大家分享一下Entity Framework怎么使用Code First模式管理事务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后...
    99+
    2023-06-29
  • 怎么在Linux上托管Django应用
    本篇内容主要讲解“怎么在Linux上托管Django应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在Linux上托管Django应用”吧!介绍托管 Django Web 应用程序相当简单...
    99+
    2023-06-16
  • 怎么理解PostgreSQL事务管理
    本篇内容介绍了“怎么理解PostgreSQL事务管理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Th...
    99+
    2024-04-02
  • 怎么在python中使用上下文管理
    本篇文章为大家展示了怎么在python中使用上下文管理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开发,众多大型...
    99+
    2023-06-14
  • 怎么在Fedora中使用dnf包管理器
    在Fedora中使用dnf包管理器可以很方便地安装、更新和删除软件包。 以下是一些基本的dnf命令: 安装软件包: sudo d...
    99+
    2024-03-13
    Fedora
  • 怎么在CentOS中使用rpm包管理器
    怎么在CentOS中使用rpm包管理器?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。RPM包的命名例如,bash-4.3.2-1.centos6.x86_64.rpmrpm...
    99+
    2023-06-10
  • 如何在Oracle中执行事务管理
    在Oracle中执行事务管理可以通过使用以下方法: 使用BEGIN和END语句来定义事务的开始和结束。在BEGIN和END语句之...
    99+
    2024-04-09
    Oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作