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

dar*_*ace 14 django

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

此错误报告(https://code.djangoproject.com/ticket/10813)引用了该技术,但没有解释它.运行django.db.transaction.rollback会导致"TransactionManagementError:此代码不在事务管理下".

Set*_*eth 20

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

你要:

from django.db import transaction
transaction.rollback()
Run Code Online (Sandbox Code Playgroud)

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


djs*_*ith 7

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

from django.db import transaction
transaction.rollback_unless_managed()
Run Code Online (Sandbox Code Playgroud)