Python使用cx_Oracle模組操作Oracle資料庫詳解
本文例項講述了Python使用cx_Oracle模組操作Oracle資料庫。分享給大家供大家參考,具體如下:
ORACLE_SID引數,這個引數是作業系統中用到的,它是描述我們要預設連線的資料庫例項,對於一個機器上有多個例項的情況下,要修改後才能通過 conn / as sysdba連線,因為這裡用到了預設的例項名。
簡而言之,打個比方,你的名字叫小明,但是你有很多外號。你父母叫你小明,但是朋友都叫你的外號。
這裡你的父母就是oracle例項,小明就是sid,service name就是你的外號。
sid用於例項區分各個資料庫,service name用於外部連結。 它們可能是不同的,要注意你得到的是哪個名字,合理使用,否則遠端連線別的資料庫可能出錯。
前言
Python自帶的模組中有很多操縱檔案的。我們可以把檔案的資料讀出來,經過處理還可以將資料寫入檔案中。但是對於資料的管理和分析來說,資料庫還是專業一些。如果Python能和資料庫結合在一起,那麼就能結合兩種的優勢,提高效率。
工作中使用的是Oracle資料庫,Python有一個模組cx_Oracle可以與Oracle相連。要使用cx_Oracle,就要先下載。
1. 下載cx_Oracle
Python一個官方網站PyPI,上面有豐富的模組。cx_Oracle就可以在PyPI中下載。開啟PyPI的網址https://pypi.python.org/pypi,在裡面搜尋cx_Oracle,即可找到該模組,其下載地址為http://cx-oracle.sourceforge.net/。當然也可以通過其它的途徑下載。
下載之後就可以使用了。
2. 使用流程
簡單的使用流程如下:
①.引用模組cx_Oracle
②.連線資料庫
③.獲取cursor
④.使用cursor進行各種操作
⑤.關閉cursor
⑥.關閉連線
下面是一個簡單的例子:
cx_Oracle.connect("使用者名稱 / 密碼@ Oracle伺服器IP / Oracle的SERVICE_NAME")
獲得 Oracle的SERVICE_NAME:
su - oracle #切換至oracle使用者
env | grep ORACLE #查詢ORACLE的環境變數
ORACLE_SID=benguo # benguo就是SERVICE_NAME
import cx_Oracle #引用模組cx_Oracle conn=cx_Oracle.connect('load/123456@localhost/ora11g') #連線資料庫 c=conn.cursor() #獲取cursor x=c.execute('select sysdate from dual') #使用cursor進行各種操作 x.fetchone() c.close() #關閉cursor conn.close() #關閉連線
例子:
#coding:utf-8 import cx_Oracle def main(): conn = cx_Oracle.connect("zebra/[email protected]/benguo") cur =conn.cursor() r= cur.execute("select * from userinfo") print print r.fetchone() if __name__ == '__main__': main()
3. 幾種用法
Python對資料庫的操作主要有2方面:一個是寫資料,一個是讀資料。這2個方面的實現可以通過SQL語句實現,也可以通過儲存過程實現。所以cx_Oracle的主要用法有:
①. 執行SQL語句
②. 呼叫儲存過程和函式。
4. 執行SQL語句
執行SQL語句很簡單,從上面的例子就可以看出。使用cursor.execute
即可執行。使用fetchone或fetchall即可將執行結果讀出來。
下面一個例子是Insert語句,使用的變數繫結。
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的動態SQL一樣,都是冒號將佔位符,即程式碼中的:1,對變數的複製就是傳入一個List,即程式碼中的['nice']。有多少個變數,list中就應該對應多少個值,數目要一致,否則會報錯。
執行之後,可以使用連線的一個方法connect.commit()
,將事務提交。
5. 呼叫儲存過程和方法
直接上程式碼:
--儲存過程程式碼: 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()
呼叫儲存過程使用的是cursor.callproc
方法。上面的儲存過程中,一個變數的值是OUT型的,在Python中,對OUT型的變數賦值,主要該變數的長度不能小於儲存過程中的。
--函式程式碼: 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()
呼叫函式使用的方法是cursor.callfunc
。這個與呼叫儲存過程不同之處在於,它需要指定傳輸引數的型別。
結束
通過cx_Oracle,可以是Python與Oracle資料庫相互溝通,這樣兩者就可以長處互補。
比如,可以將Python當成一個數據收集的工具,可以從Web,從檔案中獲取資料,然後將這些資料儲存到Oracle資料庫中,在Oracle資料庫上進行資料的進一步分析。
更多關於Python相關內容感興趣的讀者可檢視本站專題:《Python常見資料庫操作技巧彙總》、《Python編碼操作技巧總結》、《Python資料結構與演算法教程》、《Python Socket程式設計技巧總結》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python入門與進階經典教程》及《Python檔案與目錄操作技巧彙總》
希望本文所述對大家Python程式設計有所幫助。