首頁 > 後端開發 > Python教學 > python cx_Oracle模組的安裝和使用詳細介紹

python cx_Oracle模組的安裝和使用詳細介紹

高洛峰
發布: 2017-02-13 13:51:00
原創
1723 人瀏覽過

python cx_Oracle模組的安裝

最近需要寫一個資料遷移腳本,將單一Oracle中的資料遷移到MySQL Sharding集群,在linux下安裝cx_Oracle感覺還是有一點麻煩的,整理一下,做個總結。

對於Oracle客戶端,不只需要安裝對應的python模組(這裡我用了Oracle官方的python模組-cx_Oracle),還需要安裝Oracle Client,一般選擇Instant Client就夠了,還需要設定tnsnames.ora(當然也可以簡單的透過host:port/schema存取)。

安裝:

1. 先確定版本。因為我們的Oracle資料是在是有點老,所以我選了一個比較老的版本-Oracle Instant Client 10.2.0.4。

2. 下載instantclient-basic。下載網址:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html。 。這裡要嚴重BS Oracle,居然要先註冊才能下載,這也算了,關鍵是註冊的時候,密碼居然要求有數字有字母,字母還要有大小寫,還必須至少8位。逼我搞了一個比我銀行密碼還要安全的密碼(好吧,現在我已經忘記我填了什麼了...),下basic就可以了。

$wget http://download.oracle.com/otn/linux/instantclient/10204/basic-10.2.0.4.0-linux-x86_64.zip
登入後複製

3.安裝配置

$unzip instantclient-basic-linux.x64-10.2.0.4.0.zip
$cd instantclient_10_2
$cp * /usr/lib  #直接放到动态库搜索路径中,不需要额外的环境配置

或
$unzip instantclient-basic-linux.x64-10.2.0.4.0.zip
$cp -rf instantclient_10_2 /opt/
$vi /etc/profile
   export ORACLE_HOME=/opt/instantclient_10_2
   export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME

$source /etc/profile
登入後複製

4.配置tnsnames.ora(可不用配置tns)

噁心,我一開始以為還要安裝什麼東東。

 5.下載安裝cx_Oracle python模組

$wget http://downloads.sourceforge.net/project/cx-oracle/5.1.2/cx_Oracle-5.1.2-10g-py26-1.x86_64.rpm
$rpm -ivh cx_Oracle-5.1.2-10g-py26-1.x86_64.rpm 
$ls /usr/lib/python2.6/site-packages/cx_Oracle.so #有这个文件表示安装成功,根据python的位置,也可能在其他地方,自己找一下吧
登入後複製

6.驗證及問題解決

$python
>>import cx_Oracle
登入後複製

r. open shared object file: No such file or directory

表示沒有找到instant client的動態函式庫,check一下環境變數是否配置,是否生效,版本是否正確。

若報錯:ImportError: ./cx_Oracle.so: undefined symbol: PyUnicodeUCS4_Decode

Google的信息:There is nothing wrong with Debian. Python supports two incompatible 
 modes of operation for Unicode, UCS2 (the default), and UCS4. Debian uses the default,
 Redhat uses UCS4. You need to recompile the extension for UCS-2 mode
 (i.e. using a Debian installation); this would fix the undefined symbol: PyUnicodeUCS4_Decode
登入後複製

所以重新編譯

使用:

1.基本連接–使用Oracle tns alias

$./configure --prefix=/usr/local/python2.6.5 --enable-shared -enable-unicode=ucs4
$make;make install
登入後複製


2.用戶輸入密碼連接

如python script.py tp/tp@ocn_test

connection =cx_Oracle.connect("tp/tp@ocn_test")
#查看tns alias命令
cmd>tnsping ocn_test
TNS Ping Utility forLinux: Version 9.2.0.8.0-Production on 27-SEP-201110:47:48
Copyright (c) 1997, 2006, Oracle Corporation. Allrights reserved.
Used parameter files:
/opt/……/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL =TCP)(HOST =10.20.36.19)(PORT =1520))) (CONNECT_DATA =(SID =ocntest)))
OK (10msec)
登入後複製

4.使用Easy Connect語法,透過Drive連接資料庫

pwd =getpass.getpass()
connection =cx_Oracle.connect("tp",pwd,"ocn_test")
登入後複製

6 .登陸as SYSDBA

connection =cx_Oracle.connect(sys.argv[1])
登入後複製

在Linux伺服器執行Oracle操作時報了一個錯誤:

connection =cx_Oracle.connect('tp','tp','10.20.36.19:1521/ocntest')
#or
connection =cx_Oracle.connect('tp/tp@10.20.36.19:1521/ocntest')
登入後複製

解決方式:

tns_name =cx_Oracle.makedsn('10.20.36.19','1521',' ocntest ')
connection =cx_Oracle.connect('tp','tp',tns_name)
登入後複製

解決方式/,一番折騰,最後使用第5種連接方式,瞬間解決此問題。

感謝閱讀,希望能幫助大家,謝謝大家對本站的支持!

更多python cx_Oracle模組的安裝和使用詳細介紹相關文章請關注PHP中文網!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板