我曾经知道如何做到这一点,但我忘记了。有时,在使用Django shell时,您会犯一个错误并导致事务中止。之后,您执行的任何进一步查询都将导致DatabaseError:当前事务中止,命令被忽略,直到事务块结束。但是,我认为有一种方法可以在手动发生时回滚事务,因此您不必重新启动会话。谁能告诉我它是什么?
此错误报告(https://code.djangoproject.com/ticket/10813)引用了该技术但未对其进行解释。运行django.db.transaction.rollback会导致“TransactionManagementError:此代码不在事务管理下”。
答案 0 :(得分:20)
使用Postgres时,这种情况一直发生在我身上,这真的很烦人。
你想:
from django.db import transaction
transaction.rollback()
大部分时间这都很好(根据我的经验,忽略TransactionManagementError
是安全的)。
答案 1 :(得分:7)
这稍微好一些,因为你没有得到TransactionManagementError
的堆栈跟踪:
from django.db import transaction
transaction.rollback_unless_managed()