Я пытаюсь выполнить запрос из базы данных PostgreSQL с драйверами ANSI, но для некоторых запросов происходит сбой, выдавая следующую ошибку:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xfd in position 10: ordinal not in range(128)
Вот функция для установки соединения и запроса :
import psycopg2
import pandas as pd
def query_cdk_database(query):
conn = psycopg2.connect(host="some_host", port = xxx,
database="xxx", user="xxxx",
password="xxx", client_encoding ='auto')
cur = conn.cursor()
cur.execute(query)
dat = cur.fetchall()
cur.close()
conn.close()
return dat
должен сказать, что большинство запросов работает, но для некоторых он прерывается. Вот тот, который всегда ломается:
query = u"SELECT * FROM ed.VehicleSales_v"
x = query_cdk_database(query)
, он возвращает следующую ошибку:
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-26-06ace3c63c62> in <module>
1 query = u"SELECT * FROM ed.VehicleSales_v;"
----> 2 x = query_raw(query)
<ipython-input-20-6abf4dcf327f> in query_raw(query)
7 cur = conn.cursor()
8 cur.execute(query)
----> 9 dat = cur.fetchall()
10 cur.close()
11 conn.close()
UnicodeDecodeError: 'ascii' codec can't decode byte 0xfd in position 10: ordinal not in range(128)
Чтобы решить эту проблему, я попытался сделать следующее:
- изменяя параметр соединения "client_encoding" в psycopg2.connect на несколько разных.
- циклически просматривая все столбцы один за другим, чтобы определить, какой из них возвращает ошибку, но по отдельности никто не возвращает ошибку.
- преобразовать строку запроса в Unicode или другой другой код c
- Загрузите данные вручную из PGAdmin, а затем прочитайте их с помощью pandas, но с предупреждением "DtypeWarning: Columns (4,55,70,153) смешанные типы "(это может быть отдельный вопрос)