一、问题描述
在使用python3.8.9通过psycopg2(版本为2.9.5)连接华为高斯gaussdb时遇到了下面报错:
UnicodeDecoderError ‘ascii’ codec can’t decode byte 0xe7 in position 0 ordinal not in range(128)
同样的操作连接postgresql数据库没有问题,但是连接华为高斯gauss数据库却报错了,看报错是编码问题
二、解决方式
原代码(部分隐藏):
import psycopg2
from xxx import logger
conn = psycopg2.connect(dbname="xxx",user="xxx",password="xxx",host="xxx",port=25308)
cursor = conn.cursor()
try:
cursor.execute("xxx")
conn.commit()
except Exception as e:
logger.info("sql执行失败,错误信息如下:")
logger.exception(e)
conn.rollback()
解决后的代码:
import psycopg2
from xxx import logger
conn = psycopg2.connect(dbname="xxx",user="xxx",password="xxx",host="xxx",port=25308)
# 设置编码
conn.set_client_encoding('utf8')
cursor = conn.cursor()
try:
cursor.execute("xxx")
conn.commit()
except Exception as e:
logger.info("sql执行失败,错误信息如下:")
logger.exception(e)
conn.rollback()
新增了一行给数据库连接设置了编码
# 设置编码
conn.set_client_encoding('utf8')
本问题解决参考文献,在此表示十分感谢:参考文献