在 Python3 中查询 DB 抛出 ascii codec can't decode byte 错误

Querying DB in Python3 throws ascii codec can't decode byte error

我正在使用 运行ning python 3.8.6(在 aws lambda 上)并使用 psycopg2 连接到 postgres 数据库。用例是连接到数据库,运行 查询并将此查询保存到 csv 文件。数据库很大,当我处理了大约 3/4 的文件时,数据库中似乎有非 ascii 字符导致了一些问题,因为我收到以下错误消息:

"errorMessage": "'ascii' codec can't decode byte 0x93 in position 0: ordinal not in range(128)",
"errorType": "UnicodeDecodeError",

基于错误,我尝试查看文档以帮助缓解问题并采纳了一些建议,但我仍然遇到问题。代码很长,但是最新版本包括一些以前遵循的数据库部分的建议如下:

import psycopg2
import psycopg2.extensions

psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)
.
.
try:
    conn = psycopg2.connect(host=db_host, user=db_username, password=db_password, database=db_name)
.
.
def run_sql():
    with conn.cursor() as cur:
        cur.execute(open(sql_file_location, 'r', encoding="utf-8", errors="ignore").read())
        with open(csv_filename_location, mode='w', encoding="utf-8") as csv_file:
            csv_writer = csv.writer(csv_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
             for row in cur:
                csv_writer.writerow(list(row))
        conn.commit()

循环返回结果时出现错误:

 line 167, in run_sql\n for row in cur:\n"

我注意到的一些进一步信息是 Lambda 是 运行ning utf-8 和数据库 returns SQLASCII 当 运行ning conn.encoding和 returns SQL_ASCII 当 运行ning conn.cursor()fetchone()[0]

我认为数据库中的符号可能是“€”符号或类似的东西,所以如果有人有任何关于更改的建议以解决这个问题,我将不胜感激。

对于那些以后遇到同样问题的人来说,我连接的数据库实际上使用的是 SQL_ASCII,我在声明我的连接时错过了一个步骤以使用 [=12] =] 在我的环境中。下面是连接后添加的一行:

try:
    conn = psycopg2.connect(host=db_host, user=db_username, password=db_password, database=db_name)
    conn.set_client_encoding("utf-8")