这是我尝试运行的代码:
import pandas as p
import locale
locale.setlocale(locale.LC_ALL, '')
Out[24]: 'Spanish_Argentina.1252'
from sqlalchemy import create_engine
engine = create_engine('postgresql://user:pass@localhost/mdb',client_encoding = 'WIN1252')
p.read_sql("SELECT año FROM nacvivos.nac LIMIT 10",engine)
但是有这个编码问题:
ProgrammingError: (ProgrammingError) no existe la columna «aã±o» LINE 1: SELECT año FROM nacvivos.nac LIMIT 10 ^ 'SELECT a\xc3\xb1o FROM nacvivos.nac LIMIT 10' {}
我应该如何在 python 中设置配置来处理这个问题?忽略修改列名的明显答案将解决问题。 postgresql 中的数据库是 win1252 编码。提前致谢。
最佳答案
您必须在 create_engine
中指定 encoding
关键字(而不是 client_encoding
),其中 'cp1252' 是 ' WIN1252':
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”作为列名的表。
关于python - 连接到列中带有字符ñ的postgresql表时如何在Python中设置sqlalchemy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28397855/