2017-01-30 8 views
1

Я хотел бы поместить кнопку в графический интерфейс, если программное обеспечение подключается к определенной Postgre-DB. Я написал небольшую тестовую функцию: если она может подключиться к БД, она возвращает True, если не возвращает False.Тестирование подключения Postgres-DB

Код работает, но есть проблема: если нет связи (я просто вытаскиваю интернет-кабель, ничего другого не меняется), просто занимает слишком много времени. Не могли бы вы помочь мне сделать код быстрее, если нет связи?

Вот мой простой тест-функция:

import psycopg2 

def postgres_test(): 

    try: 
     conn = psycopg2.connect("dbname='mydb' user='myuser' host='my_ip' password='mypassword'") 
     conn.close() 
     return True 
    except: 
     return False 
+0

Если тайм-аут является возможной причиной отсутствия связи, я боюсь, что вы не можете сделать лучше, вы должны ждать, пока таймаут не закончится. –

+1

Похоже, вы можете передать время ожидания в секундах до вашего вызова 'connect()', как описано здесь https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-PARAMKEYWORDS. Будет ли это соответствовать тому, что вы ищете? – user2027202827

ответ

0

Спасибо за комментарии. И да, это был тайм-аут.

Вот мой код быстрее:

import psycopg2 

def postgres_test(): 

    try: 
     conn = psycopg2.connect("dbname='mydb' user='myuser' host='my_ip' password='mypassword' connect_timeout=1 ") 
     conn.close() 
     return True 
    except: 
     return False 
+0

Это может привести к ложному срабатыванию, если соединение некоторое время будет задержано. В любом случае пользователь может повторно нажать эту кнопку для двойной проверки. На практике, если БД является локальным, ответ должен быть быстрым, так что ложный результат маловероятен. Вы можете принять свой собственный ответ. –

Смежные вопросы