gpt4 book ai didi

python-3.x - PostgreSQL psycopg2 Python3.7.4 UnicodeDecodeError : 'ascii' codec can't decode byte

转载 作者:行者123 更新时间:2023-12-05 06:18:23 26 4
gpt4 key购买 nike

我正在尝试使用 ANSI 驱动程序从 PostgreSQL 数据库进行查询,但对于某些查询它失败了,并出现以下错误:

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)

为了解决这个问题,我尝试了以下方法:

  • 将 psycopg2.connect 中的连接参数“client_encoding”更改为几个不同的参数。
  • 逐一遍历所有列以检测哪一列返回错误,但单独没有一列返回错误。
  • 将查询字符串转换为 unicode 或其他不同的编解码器
  • 从 PGAdmin 手动下载原始数据,然后使用 pandas 读取它,但带有警告“DtypeWarning:Columns (4,55,70,153) have mixed types”(这可能是一个单独的问题)

最佳答案

我使用包 pyodbc 解决了这个问题。这里:

import pyodbc
import pandas as pd

conn_str = (
"DRIVER={PostgreSQL Unicode};"
"DATABASE=adp_report;"
"UID=db_name;"
"PWD=password;"
"SERVER=111.111.11.11;"
"PORT=5432;"
)

注意“DRIVER={PostgreSQL Unicode};”就是那个字符串。对于其他参数,请相应地更改它们。这是一个方便的函数,用于从数据库传递连接字符串和查询。

def query_db(query):
conn = pyodbc.connect(conn_str)
dat = pd.read_sql(query, conn)
conn.close()
return dat

关于python-3.x - PostgreSQL psycopg2 Python3.7.4 UnicodeDecodeError : 'ascii' codec can't decode byte,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61278211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com