2010-12-15 6 views
12

J'ai un script autonome qui lit/écrit depuis/vers Postgre en utilisant Django ORM.Django comment se reconnecter après DatabaseError: délai de requête

je reçois cette erreur de temps en temps

DatabaseError: query timeout server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request.

Je dois rétablir la connexion et essayez de nouveau le code de traitement dans le script, mais ne peut pas sembler trouver un moyen. Le code suivant lève 'InterfaceError: connection already closed' lors d'une nouvelle tentative, cela ne fonctionne donc pas.

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

Une idée?

Répondre

25

J'ai un même besoin de recréer la connexion de base de données et je suis en train de 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 cela, mais il semble fonctionner pour MySQL et sqlite au moins. De même, si vous utilisez multi-db, vous devrez effectuer cette étape sur votre connexion spécifique à partir du dictionnaire django.db.connections.

+1

Je ne suis plus dérangé par le problème. Si quelqu'un d'autre a vérifié que cette réponse est correcte, je la marquerai. Merci d'avoir répondu. – kakarukeys

+0

Essayez-le. Je vous tiens au courant si cela fonctionne ... –

+0

@kakarukeys Cela fonctionne pour moi. (Django 1.4 et en utilisant postgresql) –

Questions connexes