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

标签 python postgresql encoding pandas sqlalchemy

这是我尝试运行的代码:

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/

相关文章:

python - 如何在 scipy.interpolate 中设置三次样条插值的第一个和最后一个斜率?

postgresql - 使用 Helm 的 PostgreSQL 中的意外持久存储

sql - postgres 中不区分大小写的索引,处理区分大小写的查询?

postgresql - 在 Linux 上的可移动卷上安装 Postgres?

Python 2.7 编码和 feedparser

math - 就叶子数而言,完整k元树中的节点总数是多少?

python-3.x - Unicode编码错误: 'charmap' codec can't encode character '\u2010' : character maps to <undefined>

python - OpenId 连接提供商 Python 3

python - 如何根据其他列中的多个条件更新列数据?

python - 需要此正则表达式的帮助