在导致DatabaseError之后,如何在Django shell会话期间回滚?

时间:2011-09-02 18:11:41

标签: django

我曾经知道如何做到这一点,但我忘记了。有时,在使用Django shell时,您会犯一个错误并导致事务中止。之后,您执行的任何进一步查询都将导致DatabaseError:当前事务中止,命令被忽略,直到事务块结束。但是,我认为有一种方法可以在手动发生时回滚事务,因此您不必重新启动会话。谁能告诉我它是什么?

此错误报告(https://code.djangoproject.com/ticket/10813)引用了该技术但未对其进行解释。运行django.db.transaction.rollback会导致“TransactionManagementError:此代码不在事务管理下”。

2 个答案:

答案 0 :(得分:20)

使用Postgres时,这种情况一直发生在我身上,这真的很烦人。

你想:

from django.db import transaction
transaction.rollback()

大部分时间这都很好(根据我的经验,忽略TransactionManagementError是安全的)。

答案 1 :(得分:7)

这稍微好一些,因为你没有得到TransactionManagementError的堆栈跟踪:

from django.db import transaction
transaction.rollback_unless_managed()