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

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

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
31 янв. 2025, в 00:16
43000 руб./за проект
30 янв. 2025, в 21:33
5000 руб./за проект
30 янв. 2025, в 21:14
4000 руб./за проект