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