Django 无法使用原子事务的 try-exception 块回滚

2024-01-22

我在 Django 中的视图之一对 6-7 个表执行保存操作。我希望这些事务是原子的,即如果第五个或第六个事务失败,我想回滚所有以前的保存。 该视图包含一个 try-except 块来处理引发的异常。

它看起来像这样:

@transaction.atomic
def my_view(request):
    sid = transaction.savepoint()
    try:
        Table1.save()
        Table2.save()
        Table3.save()
        Table4.save()
        Table5.save()
        Table6.save()
        Table7.save()  # This might fail. In case of failure I want to rollback saves from Table1 to Table6

        transaction.savepoint_commit(sid)
    except Exception as e:
        print(str(e))
        transaction.savepoint_rollback(sid)
        return JsonResponse({"Status": 0, "Data": str(e)}) 

我已经尝试过上述方法,但 Table7.save() 失败,并且 Table1 到 Table6 回滚尚未发生。 我想将 JSON 响应返回为{"Status": 0, Data: "Error That occurred"}在所有情况下。 我不想像中那样重新引发 except 块中的异常这个链接 https://stackoverflow.com/questions/34730385/django-rollback-save-with-transaction-atomic

我应该怎么做才能返回正确的 JSONResponse 并在失败时回滚所有内容?


正如建议的link https://stackoverflow.com/a/34730574/1685980:

事务原子性如果您的,将在数据库上执行事务 视图产生没有错误的响应。因为你正在捕捉 你自己例外,在 Django 看来,你的视图刚刚执行 美好的。如果捕获到异常,需要自己处理

另一种方法是使用transaction.atomic inside with(作为上下文管理器),这将确保提交或回滚(再次在同一链接上建议并解释here https://docs.djangoproject.com/en/3.0/topics/db/transactions/#controlling-transactions-explicitly)

def my_view(request):
    try:
        with transaction.atomic():
            Table1.save()
            Table2.save()
            Table3.save()
            Table4.save()
            Table5.save()
            Table6.save()
            Table7.save()  # This might fail. In case of failure I want to rollback saves from Table1 to Table6

    except Exception as e:
        print(str(e))
        return JsonResponse({"Status": 0, "Data": str(e)}) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 无法使用原子事务的 try-exception 块回滚 的相关文章

随机推荐

  • 表单身份验证:禁用重定向到登录页面

    我有一个使用 ASP NET 表单身份验证的应用程序 在大多数情况下 它运行得很好 但我正在尝试通过 ashx 文件添加对简单 API 的支持 我希望 ashx 文件具有可选的身份验证 即 如果您不提供身份验证标头 那么它只能匿名工作 但是
  • 需要将整个postgreSQL数据库加载到RAM中

    如何将整个 PostgreSql 数据库放入 RAM 中以便更快地访问 我有 8GB 内存 我想将 2GB 专门用于数据库 我已阅读有关共享缓冲区设置的信息 但它仅缓存数据库中访问次数最多的片段 我需要一个解决方案 将整个数据库放入 RAM
  • 修剪字符串中的多个换行符和多个空格?

    如何修剪多个换行符 例如 text similique sunt in culpa qui officia deserunt mollitia animi id est laborum et dolorum fuga Et harum qu
  • Scrapy FormRequest 登录不起作用

    我正在尝试使用 Scrapy 登录 但收到大量 重定向 302 消息 当我使用真实登录信息以及虚假登录信息时 就会发生这种情况 我也尝试过另一个网站 但仍然没有成功 import scrapy from scrapy http import
  • JavaFX 初始化方法中的 NullPointerException

    我有控制器 我尝试从电子邮件服务器获取 INBOX 文件夹 下载下来就一切正常了 我可以将此数据 电子邮件主题 发件人 日期 放入 TableView 中 但是 仅当我等待负责在 TableView 中设置此数据的线程时 代码 The ta
  • 计算 iPhone 和门之间的距离,了解它们的物理宽度

    我有这样的场景 我知道 iPhone 屏幕的物理 不仅仅是像素 尺寸 我还知道门的宽度 现在 如果我打开 iPhone 摄像头 使用 UIImagePicker 或其他 并且我处于门的宽度完全适合摄像头宽度的位置 并且 iPhone 完全垂
  • 如何从 .jar 文件引用 .dll

    我有一个应用程序 它使用 jar 中的方法来调用 dll 这在我的机器上工作得很好 当应用程序解包或作为 jar 本身运行时 但是当 application jar 在另一台机器上运行时 外部 dll 位于系统路径上 它无法运行 dll 文
  • 我应该重载 == 运算符吗?

    如何 运算符在 C 中真的起作用吗 如果它用于比较类的对象A 它会尝试匹配所有A的属性 还是会寻找指向同一内存位置 或者可能是其他位置 的指针 让我们创建一个假设的例子 我正在编写一个利用 Twitter API 的应用程序 它有一个Twe
  • 使用生成器解析 fasta 文件( python )

    我正在尝试解析一个大的 fasta 文件 但遇到内存不足错误 一些改进数据处理的建议将不胜感激 目前 程序正确打印出名称 但是部分通过文件我得到了 MemoryError 这是发电机 def readFastaEntry fp name s
  • 如何在 iPhone 上将 sqlite ReadOnly 更改为 ReadWrite?

    我将我的应用程序部署到我的 iPhone 上并得到 Unknown error calling sqlite3 step 8 attempt to write a readonly database eu关于插入 更新语句 在模拟器上一切都
  • 如何设置 pageToken 以通过 Java SDK 从 Google Cloud Storage 获取项目列表?

    我想设置 pageToken 以获取存储在 Google Cloud Storage 中的项目 我正在使用适用于 Java v1 19 x 的 Google API 客户端库 我不知道从文件路径 或文件名 生成 pageToken 存储桶中
  • SQl 从表中删除前 100 条

    我正在尝试删除表中除最近 3 000 个项目之外的所有项目 该表有 105 000 条记录 我正在尝试此操作 但生成了错误的语法错误 delete tRealtyTrac where creation in select top 10300
  • 列出 iPhone 上本地网络上的所有计算机名称

    有没有办法在 iPhone 上的表格视图中获取并显示本地网络上的计算机名称 包括 IP 地址 列表 所有电脑包括mac windows linux等 提前致谢 您需要执行的操作分为两部分 扫描本地网络以查找所有活动主机并对其 IP 地址进行
  • 值未显示在选择按钮中

    我试图在选择按钮中获取选项 但它没有显示 我的代码如下 索引 html
  • 我如何获得在 ASP.NET MVC 表单中定义 n 次的值?

    我有一个表单 用户使用添加另一个文本框并填写它们来填写信息 n 次 我把它们命名为 textbox 1 textbox 2 现在我如何获取以 textbox 1 开头的所有表单值 任何想法在 ASP NET MVC 中做到这一点 您可以使用
  • 如何使用 C++ 列出 Windows 中的子目录?

    如何使用 C 列出 Windows 中的子目录 使用可以跨平台运行的代码会更好 这是我的问题解决方案 但它是仅限 Windows 的解决方案 我想使用跨平台解决方案 但不使用 boost include
  • 反射获取FieldInfo对象的类型?

    大家好 我需要访问课程某类声明的 Wrapper 类中有一个私有字段 到目前为止 使用反射我已经能够获取私有字段成员 我如何将其转换回其原始类型 以便我可以访问它的属性和其他成员 internal class Program private
  • 架构更改后 Firedac 查询字段列表未更新

    我正在 SQL 中创建一个临时表 然后向其中添加一个新字段 Firedac 似乎正在缓存该临时表的字段列表 以下代码给出 FDQuery5 未找到字段 可用 FDQuery5 Connection FDConnection1 FDConne
  • 正确使用session_set_cookie_params

    我正在尝试实现一个具有 记住我 功能的登录系统 这是我的登录页面 http pastebin com q6iK0Mgy http pastebin com q6iK0Mgy 在此 我尝试使用 session set cookie param
  • Django 无法使用原子事务的 try-exception 块回滚

    我在 Django 中的视图之一对 6 7 个表执行保存操作 我希望这些事务是原子的 即如果第五个或第六个事务失败 我想回滚所有以前的保存 该视图包含一个 try except 块来处理引发的异常 它看起来像这样 transaction a