Django, как восстановить соединение после DatabaseError: время ожидания запроса - PullRequest
13 голосов
/ 15 декабря 2010

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

Я иногда получаю эту ошибку

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

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

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

Есть идеи?

1 Ответ

28 голосов
/ 05 мая 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...