Обработка ошибок, вызванных некорректными запросами с использованием psycopg2 и pandas - PullRequest
2 голосов
/ 18 апреля 2019

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

Существуют две основные проблемы, которые могут вызвать сбой функции.

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

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

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

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

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!\n\n{e})

При неправильном запросе, как указано выше, я ожидаю, что сообщение об ошибке будет "Запрос не выполнен!" а затем ошибка, которая будет показана ниже этого.

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

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

1 Ответ

1 голос
/ 19 апреля 2019

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

Обработка 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!\n\n{e}')
...