Ubuntu下Python通過SQLAlchemy庫訪問Oracle資料庫
SQLAlchemy並不是資料庫驅動,Python訪問Oracle資料的驅動是cx_Oracle,但是這個驅動依賴於Oracle instant client。所以python如果想通過SQLAlchemy庫訪問Oracle資料庫,那麼需要先安裝Oracle instant client、再安裝cx_Oracle、最後安裝SQLAlchemy。
搞了一圈下來,發現這個過程比較繁瑣,現在的資料有些老舊,寫篇文檔和大家分享下。
安裝Oracle instant client去Oracle官網下載安裝包
http://www.oracle.com/technet...
我看的時候已經是版本 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
簡稱basic、devel包
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/目錄拷貝了lib、bin庫,devel包安裝後會/usr/lib/oracle/12.1/client64/目錄下拷貝include標頭檔。
但是,我在用alien轉devel RPM包時失敗了,後來我就把RPM包解壓,發現devel RPM包裡面就是一些include檔案,把這些檔案拷貝到/usr/lib/oracle/12.1/client64/include目錄,也能正常工作。
安裝包的作用是在指定目錄下存放bin、lib、include標頭檔這些東西,如果安裝不了,可以自己解壓執行。
設定環境變數
設定環境變數的目的是為了讓其它程式能找到安裝的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 就可以完成安裝了