PostgreSQL psycopg2 Python3 .7.4 UnicodeDecodeError: код 'ascii' c не может декодировать байт - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь выполнить запрос из базы данных 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) смешанные типы "(это может быть отдельный вопрос)
...