Обработка ошибок, вызванных неправильными запросами, с использованием psycopg2 и pandas

#python #pandas #psycopg2

#питон #панды #psycopg2

Вопрос:

У меня есть функция, которая запрашивает сервер postgres с использованием psycopg2 и возвращает фрейм данных pandas обратно.

Есть две основные проблемы, которые могут привести к сбою функции.

1) сервер не работает — это обрабатывается psycopg2.Исключение OperationalError. Который я могу использовать, чтобы дать пользователю понять, что он должен проверить, работает ли сервер.

2) пользователь вводит неправильный запрос.

Второй вопрос — это то, с чем мне нужна помощь. Я считаю, что это ошибка базы данных. Я хочу использовать это как исключение и распечатать сообщение пользователю, чтобы исправить его запрос.

Пример кода приведен ниже:

 conn = None
query = 'SELECT nonsense from schema1.table'
try:
    conn = pyscopg2.connect(params)
    df = pd.read_sql_query(query,conn)
except (psycopg2.OperationalError,psycopg2.DatabaseError) as e:
    print (f'Query failed!nn{e})
 

При неправильном запросе, как указано выше, я бы ожидал, что сообщение об ошибке будет «Ошибка запроса не удалась!», А затем ошибка будет показана ниже.

В настоящее время я просто получаю:

 DatabaseError: Execution failed on query 'SELECT nonsense from schema1.table': column "nonsense" does not exist
LINE 1: SELECT nonsense from schema1.table
 

Ответ №1:

Вы должны / можете обработать ошибку на уровне pandas.

Обработка pandas.io.sql.DatabaseError работает на меня:

 from pandas.io.sql import DatabaseError 

try:
    # ...
    df = pd.read_sql_query(query, conn)
except DatabaseError as e:
    print (f'Query failed!nn{e}')
 

Комментарии:

1. Это определенно правильный способ сделать это. Спасибо, что предупредили.