Python使用cx_Oracle模塊操作Oracle數(shù)據(jù)庫(kù)詳解
本文實(shí)例講述了Python使用cx_Oracle模塊操作Oracle數(shù)據(jù)庫(kù)。分享給大家供大家參考,具體如下:
ORACLE_SID參數(shù),這個(gè)參數(shù)是操作系統(tǒng)中用到的,它是描述我們要默認(rèn)連接的數(shù)據(jù)庫(kù)實(shí)例,對(duì)于一個(gè)機(jī)器上有多個(gè)實(shí)例的情況下,要修改后才能通過(guò) conn / as sysdba連接,因?yàn)檫@里用到了默認(rèn)的實(shí)例名。
簡(jiǎn)而言之,打個(gè)比方,你的名字叫小明,但是你有很多外號(hào)。你父母叫你小明,但是朋友都叫你的外號(hào)。
這里你的父母就是oracle實(shí)例,小明就是sid,service name就是你的外號(hào)。
sid用于實(shí)例區(qū)分各個(gè)數(shù)據(jù)庫(kù),service name用于外部鏈接。 它們可能是不同的,要注意你得到的是哪個(gè)名字,合理使用,否則遠(yuǎn)程連接別的數(shù)據(jù)庫(kù)可能出錯(cuò)。
前言
Python自帶的模塊中有很多操縱文件的。我們可以把文件的數(shù)據(jù)讀出來(lái),經(jīng)過(guò)處理還可以將數(shù)據(jù)寫(xiě)入文件中。但是對(duì)于數(shù)據(jù)的管理和分析來(lái)說(shuō),數(shù)據(jù)庫(kù)還是專(zhuān)業(yè)一些。如果Python能和數(shù)據(jù)庫(kù)結(jié)合在一起,那么就能結(jié)合兩種的優(yōu)勢(shì),提高效率。
工作中使用的是Oracle數(shù)據(jù)庫(kù),Python有一個(gè)模塊cx_Oracle可以與Oracle相連。要使用cx_Oracle,就要先下載。
1. 下載cx_Oracle
Python一個(gè)官方網(wǎng)站PyPI,上面有豐富的模塊。cx_Oracle就可以在PyPI中下載。打開(kāi)PyPI的網(wǎng)址https://pypi.python.org/pypi,在里面搜索cx_Oracle,即可找到該模塊,其下載地址為http://cx-oracle.sourceforge.net/。當(dāng)然也可以通過(guò)其它的途徑下載。
下載之后就可以使用了。
2. 使用流程
簡(jiǎn)單的使用流程如下:
①.引用模塊cx_Oracle
②.連接數(shù)據(jù)庫(kù)
③.獲取cursor
④.使用cursor進(jìn)行各種操作
⑤.關(guān)閉cursor
⑥.關(guān)閉連接
下面是一個(gè)簡(jiǎn)單的例子:
cx_Oracle.connect("用戶(hù)名 / 密碼@ Oracle服務(wù)器IP / Oracle的SERVICE_NAME")
獲得 Oracle的SERVICE_NAME:
su - oracle #切換至oracle用戶(hù)
env | grep ORACLE #查詢(xún)ORACLE的環(huán)境變量
ORACLE_SID=benguo # benguo就是SERVICE_NAME
import cx_Oracle #引用模塊cx_Oracle conn=cx_Oracle.connect('load/123456@localhost/ora11g') #連接數(shù)據(jù)庫(kù) c=conn.cursor() #獲取cursor x=c.execute('select sysdate from dual') #使用cursor進(jìn)行各種操作 x.fetchone() c.close() #關(guān)閉cursor conn.close() #關(guān)閉連接
例子:
#coding:utf-8 import cx_Oracle def main(): conn = cx_Oracle.connect("zebra/zebra@192.168.0.113/benguo") cur =conn.cursor() r= cur.execute("select * from userinfo") print print r.fetchone() if __name__ == '__main__': main()
3. 幾種用法
Python對(duì)數(shù)據(jù)庫(kù)的操作主要有2方面:一個(gè)是寫(xiě)數(shù)據(jù),一個(gè)是讀數(shù)據(jù)。這2個(gè)方面的實(shí)現(xiàn)可以通過(guò)SQL語(yǔ)句實(shí)現(xiàn),也可以通過(guò)存儲(chǔ)過(guò)程實(shí)現(xiàn)。所以cx_Oracle的主要用法有:
①. 執(zhí)行SQL語(yǔ)句
②. 調(diào)用存儲(chǔ)過(guò)程和函數(shù)。
4. 執(zhí)行SQL語(yǔ)句
執(zhí)行SQL語(yǔ)句很簡(jiǎn)單,從上面的例子就可以看出。使用cursor.execute
即可執(zhí)行。使用fetchone或fetchall即可將執(zhí)行結(jié)果讀出來(lái)。
下面一個(gè)例子是Insert語(yǔ)句,使用的變量綁定。
import cx_Oracle conn=cx_Oracle.connect('load/123456@loaclhost/ora11g') c=conn.cursor() x=c.execute('insert into demo(v) values(:1)',['nice']) conn.commit(); c.close() conn.close()
變量綁定和Oracle的動(dòng)態(tài)SQL一樣,都是冒號(hào)將占位符,即代碼中的:1,對(duì)變量的復(fù)制就是傳入一個(gè)List,即代碼中的['nice']。有多少個(gè)變量,list中就應(yīng)該對(duì)應(yīng)多少個(gè)值,數(shù)目要一致,否則會(huì)報(bào)錯(cuò)。
執(zhí)行之后,可以使用連接的一個(gè)方法connect.commit()
,將事務(wù)提交。
5. 調(diào)用存儲(chǔ)過(guò)程和方法
直接上代碼:
--存儲(chǔ)過(guò)程代碼: CREATE OR REPLACE PROCEDURE P_DEMO(V1 IN VARCHAR2, V2 OUT VARCHAR2) IS BEGIN V2 := V1; END;
#Python代碼: import cx_Oracle conn=cx_Oracle.connect('load/123456@localhost/ora11g') c=conn.cursor() str1='nice' str2=' '#需要有值,即len(str2)>=len(str1) x=c.callproc('p_demo',[str1,str2]) print(str2) c.close() conn.close()
調(diào)用存儲(chǔ)過(guò)程使用的是cursor.callproc
方法。上面的存儲(chǔ)過(guò)程中,一個(gè)變量的值是OUT型的,在Python中,對(duì)OUT型的變量賦值,主要該變量的長(zhǎng)度不能小于存儲(chǔ)過(guò)程中的。
--函數(shù)代碼: CREATE OR REPLACE function F_DEMO(V1 VARCHAR2) RETURN VARCHAR2 IS BEGIN RETURN V1; END;
#Python代碼: import cx_Oracle conn=cx_Oracle.connect('load/123456@localhost/ora11g') c=conn.cursor() str1='nice' str2=c.callfunc('f_demo',cx_Oracle.STRING,[str1]) print(str2) c.close() conn.close()
調(diào)用函數(shù)使用的方法是cursor.callfunc
。這個(gè)與調(diào)用存儲(chǔ)過(guò)程不同之處在于,它需要指定傳輸參數(shù)的類(lèi)型。
結(jié)束
通過(guò)cx_Oracle,可以是Python與Oracle數(shù)據(jù)庫(kù)相互溝通,這樣兩者就可以長(zhǎng)處互補(bǔ)。
比如,可以將Python當(dāng)成一個(gè)數(shù)據(jù)收集的工具,可以從Web,從文件中獲取數(shù)據(jù),然后將這些數(shù)據(jù)保存到Oracle數(shù)據(jù)庫(kù)中,在Oracle數(shù)據(jù)庫(kù)上進(jìn)行數(shù)據(jù)的進(jìn)一步分析。
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》、《Python編碼操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Python pathlib模塊使用方法及實(shí)例解析
這篇文章主要介紹了Python pathlib模塊使用方法及實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10用python實(shí)現(xiàn)域名資產(chǎn)監(jiān)控的詳細(xì)步驟
域名資產(chǎn)監(jiān)控,通過(guò)輸入一個(gè)主域名,找到該域名對(duì)應(yīng)的ip地址所在的服務(wù)器的端口開(kāi)閉情況,本文重點(diǎn)給大家介紹用python實(shí)現(xiàn)域名資產(chǎn)監(jiān)控的問(wèn)題,需要的朋友可以參考下2021-11-11詳解Python中的GIL(全局解釋器鎖)詳解及解決GIL的幾種方案
這篇文章主要介紹了詳解Python中的GIL(全局解釋器鎖)詳解及解決GIL的幾種方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01python使用Berkeley DB數(shù)據(jù)庫(kù)實(shí)例
這篇文章主要介紹了python使用Berkeley DB數(shù)據(jù)庫(kù)的方法,以實(shí)例形式講述了完整的操作過(guò)程,并總結(jié)了具體的操作步驟,非常具有實(shí)用性,需要的朋友可以參考下2014-09-09解決Python字典寫(xiě)入文件出行首行有空格的問(wèn)題
下面小編就為大家?guī)?lái)一篇解決Python字典寫(xiě)入文件出行首行有空格的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09