在Python中使用pyodbc将Excel数据导入Postgres
我正在用 python(2.6) 通过 pyodbc
把数据从 MS-Excel 导入到 PostgreSQL。
我遇到的问题是:
在Excel文件中,有一些字符,比如 左单引号(ANSI十六进制代码:0x91)
等等。当我用pyodbc导入这些数据到PostgreSQL时,程序就会停止,并出现错误 DatabaseError: invalid byte sequence for encoding "UTF8": 0x91
。
我尝试过的办法: 我暂时使用了 decode('unicode_escape')
。但是这样做并不行,因为这只是简单地去掉或转义了那些字符。
另一种尝试: 我想先解码,确保到处都是Unicode,然后在需要从数据库读取时再编码。但由于项目的复杂性,这种方法也无法实现。
请给我一些方法、步骤或者内置函数的建议,帮助我完成这个任务。
1 个回答
1
首先,你需要找出源文档的真实编码方式。它可能是 WIN1251
。你可以选择转换编码(比如使用 iconv 工具),或者根据这个编码设置 PostgreSQL 的 client_encoding
。
如果你在 pyodbc
中没有找到相关设置(我也不太清楚),你可以直接执行一个普通的 SQL 命令:
SET CLIENT_ENCODING TO 'WIN1251';
更多信息可以参考手册中的章节 “服务器和客户端之间的自动字符集转换”。