在Python中使用pyodbc将Excel数据导入Postgres

2 投票
1 回答
1404 浏览
提问于 2025-04-17 06:54

我正在用 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';

更多信息可以参考手册中的章节 “服务器和客户端之间的自动字符集转换”

撰写回答