這篇文章主要介紹了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免費影片教學
3. Python基礎入門手冊
以上是安裝cx_Oracle模組的步驟詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!