当连接到列中带有字符ñ的postgresql表时,如何在Python中设置sqlalchemy

当连接到列中带有字符ñ的postgresql表时,如何在Python中设置sqlalchemy,python,postgresql,encoding,pandas,sqlalchemy,Python,Postgresql,Encoding,Pandas,Sqlalchemy,以下是我正在尝试运行的代码: import pandas as p import locale locale.setlocale(locale.LC_ALL, '') Out[24]:“西班牙语+阿根廷1252” 但是a有这个编码问题: 编程错误:编程错误不存在列«aã±o» 第1行:从nacvivos.nac LIMIT 10中选择一个ño ^ '从nacvivos.nac LIMIT 10中选择一个\xc3\xb1o'{} 我应该如何在python中设置配置来处理这个问题?忽略修改列名称

以下是我正在尝试运行的代码:

import pandas as p
import locale
locale.setlocale(locale.LC_ALL, '')
Out[24]:“西班牙语+阿根廷1252”

但是a有这个编码问题:

编程错误:编程错误不存在列«aã±o» 第1行:从nacvivos.nac LIMIT 10中选择一个ño ^ '从nacvivos.nac LIMIT 10中选择一个\xc3\xb1o'{}

我应该如何在python中设置配置来处理这个问题?忽略修改列名称的明显答案将解决问题。postgresql中的数据库为win1252编码。提前感谢。

您必须在create_engine中指定encoding关键字,而不是client_encoding,其中“cp1252”是“WIN1252”的python编解码器名称:

engine = create_engine('postgresql://user:pass@localhost/mdb', encoding='cp1252')
然后确保您的查询也已编码:

qry = u"SELECT año FROM nacvivos.nac LIMIT 10".encode('cp1252')
pd.read_sql(qry, engine)
通过这两个步骤,我能够在以“año”作为列名的表中进行读取

qry = u"SELECT año FROM nacvivos.nac LIMIT 10".encode('cp1252')
pd.read_sql(qry, engine)