@Smeilz1
За любое развитие

Как написать код проверки соединения, и если соединение закрыто то пытаться заново подключиться к базе?

В процессе работы граббера сервер неожиданно закрыл соединение с ним
spoiler
Traceback (most recent call last):
File "C:/Users/Administrator/PycharmProjects/crypto/price_vs4_history.py", line 419, in save_history
self.cur.execute(self.history_insert,t)
psycopg2.OperationalError: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:/Users/Administrator/PycharmProjects/crypto/price_vs4_history.py", line 474, in
run_grabber('01-06-2016')
File "C:/Users/Administrator/PycharmProjects/crypto/price_vs4_history.py", line 466, in run_gecko_grabber
db.save_history(cg.coins[c],dt)
File "C:/Users/Administrator/PycharmProjects/crypto/price_vs4_history.py", line 423, in save_history
self.conn.rollback()
psycopg2.InterfaceError: connection already closed


Как я понял перед любым сохранением в базу нужно выполнить проверку соединения с ней?
Или лучше сделать Exception, и если мы идем в него, то сделать переподключение к базе заново, чтобы программа не вылетала?
Как делается проверка на закрытость соединения?
За подключение к базе у меня отвечает Класс
class DBController:
    def __init__(self,database=database, user=user, password=password, host=host, port=port):
        self.conn=psycopg2.connect(database=database,user=user,password=password,host=host,port=port)
        self.cur=self.conn.cursor()


Я добавил функцию Reconnect
def reconnect(self):
   self.conn=psycopg2.connect(database=database,user=user,password=password,host=host,port=port)
   self.cur=self.conn.cursor()


И затем при сохранении
except Exception:
     # Тут должен быть цикл со проверкой статуса текущего подключения, но как его сделать?
     #sleep(1)
     #While status ='подключения нет' :
          reconnect()


upd: Нагуглил что Psycopg2 не предоставляет такой информации и нужно делать как-то через запрос
  • Вопрос задан
  • 517 просмотров
Пригласить эксперта
Ответы на вопрос 1
Pythonic way - это "ask forgiveness not permission".
Так что пробуйте. Вывалился exception - обработайте.
Единственное что, возможно стоит reconnect() вызывать ограниченное число раз и, хотябы, делать паузу между попытками.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы