Django:可以回滚.save()调用吗?

时间:2014-01-17 00:38:59

标签: python django transactions rollback

来自官方Django文档: https://docs.djangoproject.com/en/1.5/topics/db/transactions/#transaction-rollback

a.save() # Succeeds, but may be undone by transaction rollback
try:
    b.save() # Could throw exception
except IntegrityError:
    transaction.rollback()
c.save() # Succeeds, but a.save() may have been undone

调用transaction.rollback()回滚整个事务。任何未提交的数据库操作都将丢失。在此示例中,a.save()所做的更改将丢失,即使该操作本身没有引发任何错误。

不保存执行提交吗?那么它不应该受到回滚的影响,还是我错了?

(可以为.save()函数设置参数commit = False。这表明通常保存提交)

1 个答案:

答案 0 :(得分:0)

你对“提交”一词的两个含义感到困惑。

调用保存 - 在模型或表单上 - 确实会导致对数据库的更新,因此在这种意义上它将提交到数据库。但是,所有数据库操作都发生在事务中:并且这些事务可以作为块提交或回滚。因此文档是正确的:即使您调用save(commit=True),这仍然是可以回滚的整个事务的一部分。