SQLAlchemy 并不是数据库驱动, Python 访问 Oracle 数据的驱动是 cx_Oracle, 但是这个驱动依赖于 Oracle instant client 所以 python 如果想通过 SQLAlchemy 库访问 Oracle 数据库, 那么需要先安装 Oracle instant client 再安装 cx_Oracle 最后安装 SQLAlchemy
搞了一圈下来, 发现这个过程比较繁琐, 现在的资料有些老旧, 写篇文档和大家分享下
安装 Oracle instant client
我看的时候已经是版本 12.1.0.2.0 , 同一个版本下有很多包, 支持 cx_Oracle 需要下载下面两个包
- oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
- oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm
简称 basicdevel 包
basic 包含有所有的 oracle client lib/bin 文件
devel 包含了 oracle client 外部接口的头文件
安装
Oracle 官方只提供了 RPM 包, 我的操作系统是 Ubuntu, 需要安装一个 alien 进行转换
sudo install alien 就可以完成安装
用 alien 将 RPM 包转换成 DEB 包,
- sudo alien -i oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
- sudo alien -i oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm
然后安装 deb 包
- sudo dpkg -i oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.deb
- sudo dpkg -i oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.deb
basic 包安装成功后, 在 / usr/lib/oracle/12.1/client64 / 目录拷贝了 libbin 库, devel 包安装后会 / usr/lib/oracle/12.1/client64 / 目录下拷贝 include 头文件
但是, 我在用 alien 转 devel RPM 包时失败了, 后来我就把 RPM 包解压, 发现 devel RPM 包里面就是一些 include 文件, 把这些文件拷贝到 / usr/lib/oracle/12.1/client64/include 目录, 也能正常工作
安装包的作用是在指定目录下存放 binlibinclude 头文件这些东西, 如果安装不了, 可以自己解压执行
设置环境变量
设置环境变量的目的是为了让其它程序能找到安装的 Oracle 库
- $ export ORACLE_HOME=/usr/lib/oracle/11.2/client64
- $ export LD_LIBRARY_PATH=$ORACLE_HOME/lib
链接 oracle 库到系统目录
在 /etc/ld.so.conf.d 目录下创建 oracle.conf 文件, 在文件里面指定 oracle 库的路径 / usr/lib/oracle/11.2/client64/lib
执行链接配置
$ sudo ldconfig
安装 cx_Oracle
安装 libaio 包, libaio 是 Linux 下的一个异步非阻塞接口, 它提供了以异步非阻塞方式来读写文件的方式, 读写效率比较高, oracle SQLPlus 库依赖它
sudo apt - get install libaio1
所有准备工作完成后, 执行包安装命令就可以成功安装 cx_Oracle 了
sudo apt - get install cx_Oracle
如果前期的准备工作没做好, 会报各种安装失败, 大家可以对照安装步骤, 比对前面的操作是否正确
安装 sqlalchemy
最后使用 sudo apt-get install sqlalchemy 就可以完成安装了
来源: http://www.linuxidc.com/Linux/2018-01/150670.htm