我是否需要在事务中包装django更新?

时间:2016-03-04 23:38:27

标签: django django-models transactions django-orm

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

transaction.atomic

我是否需要将其包含在{{1}}中?如果我不这样做会有什么不好的事吗?

1 个答案:

答案 0 :(得分:0)

Django的默认事务模型是自动提交db。这意味着如果在提交了一些更改之后存在异常,但在提交所有更改之前,您最终可能会遇到问题。这取决于你正在尝试做什么。根据您自己的代码,这是一个潜在的问题吗?是否存在发生错误的风险,如果是,那么某些对象是否会被更新而不是其他对象会是一个问题吗?

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