来自官方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。这表明通常保存提交)
答案 0 :(得分:0)
你对“提交”一词的两个含义感到困惑。
调用保存 - 在模型或表单上 - 确实会导致对数据库的更新,因此在这种意义上它将提交到数据库。但是,所有数据库操作都发生在事务中:并且这些事务可以作为块提交或回滚。因此文档是正确的:即使您调用save(commit=True)
,这仍然是可以回滚的整个事务的一部分。