上次用python写过一段代码, 需要读取数据库,然后数据库是很久之前的,还是9i的版本,所以连接的时候就报错。
因为写这篇文章离我写这段代码已经过去了一段时间,而且当时操作的linux也不在旁边。所以有些东西就描述的不是很详细,也不能贴图了。
像上面的这个报错就是说 版本不支持。 但是具体的错误码和英文错误信息就忘记了。 只记得大概就是这么个意思。
然后查了下数据库版本发现是9i的oracle, 之前连的都是12的。
先简单说一下python连接数据库的步骤
去网上可以搜到很多的文章是关于python 怎么使用cx_Oracle 连接oracle数据库的。
大概的步骤就是这几步,我就不详细写了。
1. 去oracle官网下一个客户端。安装之后配置环境变量
2. 用pip安装一个python端的库,cx_Oracle
3. 写一个测试脚本,连接一下数据库。
然后这个时候以为是python的包有问题, 想着找一个新的连接工具,但是一直没找到。 安装老版本的cx_Oracle包也不行。
后来翻看cx_Oracle的官方文档发现, cx_Oracle6.1 也是支持Oracle9i 的。 后来忘记在哪个英文的文档上又看到这句话后面加了一个括号, 支持哪个版本的数据库是依赖于安装的client版本。 后面我在网上搜了好久,一直没有找到过这个英文网站了。
所以知道了问题所在,就可以对应解决了。 直接去oracle官网上去下载客户端,下了一个最老的rpm包(10版本),发现不行,是因为python的cx_Oracle库不支持那么老的客户端。最低支持11.2, 于是再安装了一个11.2版本的oracle客户端。 再配置一下环境变量就可以了。 python的cx_Oracle库可以下载使用最新的版本。
最后需要注意的是数据库的字符编码, 我连的9i数据库的中文编码不是 utf-8 , 所以需要在配置环境变量的时候配置一个 NLS_LANG的变量, 然后再到代码里边获取的中文进行解码再编码。 才能正确显示。
网上一直没有文章直接说明这个问题, 希望碰到这个问题的人可以直接搜 python oracle 9i 就可以搜到我这个文章解决问题。