安裝cx_Oracle模組的步驟詳解

Y2J
發布: 2017-05-10 11:52:49
原創
3596 人瀏覽過

這篇文章主要介紹了python cx_Oracle模組的安裝和使用詳細介紹的相關資料,需要的朋友可以參考下

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 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)

注意tnsnames.ora其實不存在,是要自己建立的(這個也很噁心,我一開始以為還要安裝什麼東東。。),我沒有使用這種方式,有興趣的可以穀歌一下。

 5.下載安裝cx_Oracle python模組

$wget 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
登入後複製

若報錯誤:import cx_Oracle gave ImportError:libclntsh.so.10.1: cannot 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
登入後複製

所以重新編譯python

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

再次驗證,終於正常了。

使用:

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

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)
登入後複製

2.使用者輸入密碼連線

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

3.使用者直接在Python指令中輸入連接帳號訊息,格式如python script.py tp/tp@ocn_test

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

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

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')
登入後複製

5.先使用DSN構成TNSNAME

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

6.登陸as SYSDBA

connection =cx_Oracle.connect('tp/tp@ocn_test', mode=cx_Oracle.SYSDBA)
#or as SYSOPER
connection =cx_Oracle.connect('tp/tp@ocn_test', mode=cx_Oracle.SYSOPER)
登入後複製

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

TNS:listener does not currently know of service requested in connect descriptor
登入後複製

【相關推薦】

1. Python免費影片教學

2. Python物件導向影片教學

3. Python基礎入門手冊

以上是安裝cx_Oracle模組的步驟詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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