Django, как повторно подключиться после DatabaseError: тайм-аут запроса

У меня есть автономный script, который читает/записывает из/в Postgre с помощью Django ORM.

Я получаю эту ошибку время от времени

DatabaseError: сервер тайм-аута запроса неожиданно закрыл соединение         Это, вероятно, означает, что сервер прерывается ненормально         до или во время обработки запроса.

Мне нужно восстановить соединение и повторить код обработки в script, но не может найти способ. Следующий код вызывает "InterfaceError: соединение уже закрыто" при повторном запуске, поэтому он не работает.

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

Любая идея?

1 ответ

У меня есть аналогичная потребность в воссоздании подключения к базе данных, и я пытаюсь использовать следующую черную магию для reset соединения в django 1.3:

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

У меня нет PostgreSQL, чтобы попробовать это, но он, по-видимому, работает для MySQL и sqlite по крайней мере. Кроме того, если вы используете multi-db, вам нужно будет выполнить этот шаг на вашем конкретном соединении из словаря django.db.connections.

licensed under cc by-sa 3.0 with attribution.