溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

怎么在Python中使用cx_Oracle模塊對(duì)Oracle數(shù)據(jù)庫(kù)進(jìn)行操作

發(fā)布時(shí)間:2021-03-17 16:32:34 來(lái)源:億速云 閱讀:377 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

本篇文章為大家展示了怎么在Python中使用cx_Oracle模塊對(duì)Oracle數(shù)據(jù)庫(kù)進(jìn)行操作,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

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

上述內(nèi)容就是怎么在Python中使用cx_Oracle模塊對(duì)Oracle數(shù)據(jù)庫(kù)進(jìn)行操作,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI