【发布时间】:2016-03-04 23:38:27
【问题描述】:
假设我在 django 中运行几个模型对象的更新:
SomeModel.objects.filter(name="abc").update(name="xyz")
我需要将其包装在transaction.atomic 中吗?如果我不这样做会有什么不好的事情发生吗?
【问题讨论】:
标签: django django-models transactions django-orm
假设我在 django 中运行几个模型对象的更新:
SomeModel.objects.filter(name="abc").update(name="xyz")
我需要将其包装在transaction.atomic 中吗?如果我不这样做会有什么不好的事情发生吗?
【问题讨论】:
标签: django django-models transactions django-orm
Django 的默认事务模型是自动提交到数据库。这意味着如果在提交某些更改之后出现异常,但在提交所有更改之前,您可能最终会遇到问题 - 或者不会。这取决于你想要做什么。根据您自己的代码,这是一个潜在的问题吗?是否存在发生错误的风险?如果是,是否会出现某些对象已更新但其他对象未更新的问题?
如果是这样,您可以通过使用@transaction.atomic 装饰器(用于函数)或使用with transaction.atomic(): 包装特定代码片段来防止这种情况。如果发生错误,这将回滚对数据库的更改。为了超级安全,我猜你总是可以使用原子事务,但你需要吗?
【讨论】: