Question Django comment se reconnecter après DatabaseError: délai d'attente de requête


J'ai un script autonome qui lit / écrit depuis / vers Postgre en utilisant Django ORM.

Je reçois cette erreur de temps en temps

DatabaseError: serveur de délai d'attente de requête   fermé la connexion de manière inattendue           Cela signifie probablement que le serveur s'est arrêté anormalement           avant ou pendant le traitement de la demande.

Je dois rétablir la connexion et réessayer le code de traitement dans le script, mais ne semble pas pouvoir trouver un moyen. Le code suivant déclenche 'InterfaceError: connection already closed' lors de la nouvelle tentative, de sorte qu'il ne fonctionne pas.

for repeat in range(5):
    try:
        .....................PROCESSING CODE...................
    except DatabaseError, e:
        time.sleep(30)
    else:
        break
else:
    return

Une idée?


12
2017-12-15 07:05


origine


Réponses:


J'ai un besoin similaire de recréer la connexion à la base de données et j'essaie la magie noire suivante pour réinitialiser la connexion dans django 1.3:

from django.db import connection
connection.connection.close()
connection.connection = None

Je n'ai pas PostgreSQL à portée de main pour essayer ceci, mais cela semble fonctionner pour MySQL et sqlite au moins. De plus, si vous utilisez plusieurs bases de données, vous devrez effectuer cette étape sur votre connexion spécifique à partir du dictionnaire django.db.connections.


26
2018-05-04 23:11