#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. Это определенно правильный способ сделать это. Спасибо, что предупредили.