Python使用cx_Oracle模組操作Oracle資料庫詳解

來源:互聯網
上載者:User
這篇文章主要介紹了Python使用cx_Oracle模組操作Oracle資料庫,結a合執行個體形式較為詳細的分析了cx_Oracle模組的下載、安裝及針對Orcle資料庫的串連、執行SQL語句、預存程序等相關操作技巧,需要的朋友可以參考下

本文執行個體講述了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_Oracleconn=cx_Oracle.connect('load/123456@localhost/ora11g')  #串連資料庫c=conn.cursor()                      #擷取cursorx=c.execute('select sysdate from dual')          #使用cursor進行各種操作x.fetchone()c.close()                         #關閉cursorconn.close()                       #關閉串連

例子:

#coding:utf-8import cx_Oracledef 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對資料庫的操作主要有2方面:一個是寫資料,一個是讀資料。這2個方面的實現可以通過SQL語句實現,也可以通過預存程序實現。所以cx_Oracle的主要用法有:

①. 執行SQL語句

②. 調用預存程序和函數。

4. 執行SQL語句

執行SQL語句很簡單,從上面的例子就可以看出。使用cursor.execute即可執行。使用fetchone或fetchall即可將執行結果讀出來。

下面一個例子是Insert語句,使用的變數綁定。

import cx_Oracleconn=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) ISBEGIN  V2 := V1;END;

#Python代碼:import cx_Oracleconn=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 ISBEGIN  RETURN V1;END;

#Python代碼:import cx_Oracleconn=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資料庫上進行資料的進一步分析。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.