Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django how to reconnect after DatabaseError: query timeout

I have a stand-alone script that reads/writes from/to Postgre using Django ORM.

I get this error occasionally

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

I need to re-establish the connection and retry the processing code in the script, but can't seem to find a way. The following code raises 'InterfaceError: connection already closed' on retry, so it doesn't work.

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

Any idea?

like image 669
kakarukeys Avatar asked Dec 15 '10 07:12

kakarukeys


1 Answers

I have a similar need for recreating the database connection and I'm trying the following black magic to reset the connection in django 1.3:

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

I don't have PostgreSQL handy to try this out, but it seems to work for MySQL and sqlite at least. Also, if you're using multi-db, you're going to have to perform this step on your specific connection from the django.db.connections dictionary.

like image 104
Wes Winham Avatar answered Oct 10 '22 00:10

Wes Winham