ubuntu下python通過sqlalchemy庫訪問oracle資料庫

夢見山發表於2016-06-30

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 就可以完成安裝了

相關文章