【问题标题】:Do I need to wrap a django update in a transaction?我需要在事务中包装 django 更新吗?
【发布时间】:2016-03-04 23:38:27
【问题描述】:

假设我在 django 中运行几个模型对象的更新:

SomeModel.objects.filter(name="abc").update(name="xyz")

我需要将其包装在transaction.atomic 中吗?如果我不这样做会有什么不好的事情发生吗?

【问题讨论】:

    标签: django django-models transactions django-orm


    【解决方案1】:

    Django 的默认事务模型是自动提交到数据库。这意味着如果在提交某些更改之后出现异常,但在提交所有更改之前,您可能最终会遇到问题 - 或者不会。这取决于你想要做什么。根据您自己的代码,这是一个潜在的问题吗?是否存在发生错误的风险?如果是,是否会出现某些对象已更新但其他对象未更新的问题?

    如果是这样,您可以通过使用@transaction.atomic 装饰器(用于函数)或使用with transaction.atomic(): 包装特定代码片段来防止这种情况。如果发生错误,这将回滚对数据库的更改。为了超级安全,我猜你总是可以使用原子事务,但你需要吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      • 2010-09-08
      • 2014-08-11
      • 2021-03-16
      • 2015-06-15
      • 1970-01-01
      • 2022-01-19
      相关资源
      最近更新 更多