AVERTISSEMENT: le patch ci-dessous peut éventuellement provoquer des transactions étant laissé dans un état ouvert sur la db (au moins avec postgres). Pas sûr à 100% (et comment les corriger), mais je vous suggère fortement de ne pas faire le patch ci-dessous sur les bases de données de production.
Que l'on a accepté la réponse ne résout pas mes problèmes, dès que je reçois un DB d'erreur, je ne le suis toute nouvelle DB actions, même avec un manuel de restauration - je suis venu avec ma propre solution.
Quand je suis en cours d'exécution Django-shell, je patch Django pour fermer la connexion DB dès que des erreurs se produisent. De cette façon, je ne jamais avoir à penser à l'annulation de transactions ou de la manipulation de la connexion.
C'est le code je suis de chargement au début de mon Django-shell-session:
from django import db
from django.db.backends.util import CursorDebugWrapper
old_execute = CursorDebugWrapper.execute
old_execute_many = CursorDebugWrapper.executemany
def execute_wrapper(*args, **kwargs):
try:
old_execute(*args, **kwargs)
except Exception, ex:
logger.error("Database error:\n%s" % ex)
db.close_connection
def execute_many_wrapper(*args, **kwargs):
try:
old_execute_many(*args, **kwargs)
except Exception, ex:
logger.error("Database error:\n%s" % ex)
db.close_connection
CursorDebugWrapper.execute = execute_wrapper
CursorDebugWrapper.executemany = execute_many_wrapper