cx_Oracle 是一个Python扩展模块,用来支持访问Oracle数据库,在 python 下,即便你使用其它的数据库 ORM 映射框架, 也需要配置 cx_Oracle, 这篇文章介绍了如何配置 cx_Oracle 以便让你可以访问 Oracle 数据库。
cx_Oracle
下面这种图介绍了 cx_Oracle 在与 Oracle 数据库交互中起的作用。
安装 cx_Oracle 本身很简单:
1 | python -m pip install cx_Oracle --upgrade |
但是我们还需要安装 Oracle 客户端的库, 可以选择 Oracle Instant Client 或者 Oracle Database Express Edition (“XE”), 后者需要你本地安装了 oracle 数据库, 我们选择 Instant Client, Instant Client 提供了两种版本,zip
和 rpm
版本,zip
版本解压到本地电脑即可开始配置,rpm
则是提供给 Linux 使用的,要详细了解 rpm
,这里可以推荐一篇 IBM 的文章。
安装 Instant Client 的步骤:
- 前往 Oracle Instant Client 下载页面 下载正确的版本,一定要参考服务端的 Oracle 版本,因为客户端的高版本并不支持连接低版本的服务端,例如我第一次使用客户端 21 版本连接服务端 11 的版本就报错:
ORA-28547
下图说明了 Oracle 客户端与服务端的兼容关系:
- 在 Linux 上,使用
unzip
命令解压到你需要的文件夹
1 | mkdir -p /opt/oracle |
- 安装 libaio, libaio是Linux下的一个异步非阻塞接口,它提供了以异步非阻塞方式来读写文件的方式,读写效率比较高。
1 | sudo yum install libaio |
- 如果你不担心影响其它的程序,可以永久的将 Instant Client 添加到动态库链接:
1 | echo /opt/oracle/instantclient* > /etc/ld.so.conf.d/oracle-instantclient.conf |
- 如果你使用
tnsnames.ora
,sqlnet.ora
或oraaccess.xml
则需要更改 cx_Oracle 初始化配置
1 | import cx_Oracle |
或者设置环境变量 TNS_ADMIN
, 并将相关文件放至 network/admin
子文件夹。
通过 RPMs 安装的方式类似,在此不再赘述。
Docker file
下面是一个 Flask 应用配置 Oracle 的部分。
1 | FROM python:3.7.3 |
注:我的项目文件中已经从官网下载好
instantclient-basic-linux.x64-12.2.0.1.0.zip
文件。