@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 не предоставляет такой информации и нужно делать как-то через запрос
  • Вопрос задан
  • 590 просмотров
Пригласить эксперта
Ответы на вопрос 1
Pythonic way - это "ask forgiveness not permission".
Так что пробуйте. Вывалился exception - обработайте.
Единственное что, возможно стоит reconnect() вызывать ограниченное число раз и, хотябы, делать паузу между попытками.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы