Python使用cx_Oracle模塊操作Oracle數(shù)據(jù)庫詳解
本文實(shí)例講述了Python使用cx_Oracle模塊操作Oracle數(shù)據(jù)庫。分享給大家供大家參考,具體如下:
ORACLE_SID參數(shù),這個參數(shù)是操作系統(tǒng)中用到的,它是描述我們要默認(rèn)連接的數(shù)據(jù)庫實(shí)例,對于一個機(jī)器上有多個實(shí)例的情況下,要修改后才能通過 conn / as sysdba連接,因?yàn)檫@里用到了默認(rèn)的實(shí)例名。
簡而言之,打個比方,你的名字叫小明,但是你有很多外號。你父母叫你小明,但是朋友都叫你的外號。
這里你的父母就是oracle實(shí)例,小明就是sid,service name就是你的外號。
sid用于實(shí)例區(qū)分各個數(shù)據(jù)庫,service name用于外部鏈接。 它們可能是不同的,要注意你得到的是哪個名字,合理使用,否則遠(yuǎn)程連接別的數(shù)據(jù)庫可能出錯。
前言
Python自帶的模塊中有很多操縱文件的。我們可以把文件的數(shù)據(jù)讀出來,經(jīng)過處理還可以將數(shù)據(jù)寫入文件中。但是對于數(shù)據(jù)的管理和分析來說,數(shù)據(jù)庫還是專業(yè)一些。如果Python能和數(shù)據(jù)庫結(jié)合在一起,那么就能結(jié)合兩種的優(yōu)勢,提高效率。
工作中使用的是Oracle數(shù)據(jù)庫,Python有一個模塊cx_Oracle可以與Oracle相連。要使用cx_Oracle,就要先下載。
1. 下載cx_Oracle
Python一個官方網(wǎng)站PyPI,上面有豐富的模塊。cx_Oracle就可以在PyPI中下載。打開PyPI的網(wǎng)址https://pypi.python.org/pypi,在里面搜索cx_Oracle,即可找到該模塊,其下載地址為http://cx-oracle.sourceforge.net/。當(dāng)然也可以通過其它的途徑下載。
下載之后就可以使用了。
2. 使用流程
簡單的使用流程如下:
①.引用模塊cx_Oracle
②.連接數(shù)據(jù)庫
③.獲取cursor
④.使用cursor進(jìn)行各種操作
⑤.關(guān)閉cursor
⑥.關(guān)閉連接
下面是一個簡單的例子:
cx_Oracle.connect("用戶名 / 密碼@ Oracle服務(wù)器IP / Oracle的SERVICE_NAME")
獲得 Oracle的SERVICE_NAME:
su - oracle #切換至oracle用戶
env | grep ORACLE #查詢ORACLE的環(huán)境變量
ORACLE_SID=benguo # benguo就是SERVICE_NAME
import cx_Oracle #引用模塊cx_Oracle conn=cx_Oracle.connect('load/123456@localhost/ora11g') #連接數(shù)據(jù)庫 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對數(shù)據(jù)庫的操作主要有2方面:一個是寫數(shù)據(jù),一個是讀數(shù)據(jù)。這2個方面的實(shí)現(xiàn)可以通過SQL語句實(shí)現(xiàn),也可以通過存儲過程實(shí)現(xiàn)。所以cx_Oracle的主要用法有:
①. 執(zhí)行SQL語句
②. 調(diào)用存儲過程和函數(shù)。
4. 執(zhí)行SQL語句
執(zhí)行SQL語句很簡單,從上面的例子就可以看出。使用cursor.execute
即可執(zhí)行。使用fetchone或fetchall即可將執(zhí)行結(jié)果讀出來。
下面一個例子是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的動態(tài)SQL一樣,都是冒號將占位符,即代碼中的:1,對變量的復(fù)制就是傳入一個List,即代碼中的['nice']。有多少個變量,list中就應(yīng)該對應(yīng)多少個值,數(shù)目要一致,否則會報錯。
執(zhí)行之后,可以使用連接的一個方法connect.commit()
,將事務(wù)提交。
5. 調(diào)用存儲過程和方法
直接上代碼:
--存儲過程代碼: 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)用存儲過程使用的是cursor.callproc
方法。上面的存儲過程中,一個變量的值是OUT型的,在Python中,對OUT型的變量賦值,主要該變量的長度不能小于存儲過程中的。
--函數(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
。這個與調(diào)用存儲過程不同之處在于,它需要指定傳輸參數(shù)的類型。
結(jié)束
通過cx_Oracle,可以是Python與Oracle數(shù)據(jù)庫相互溝通,這樣兩者就可以長處互補(bǔ)。
比如,可以將Python當(dāng)成一個數(shù)據(jù)收集的工具,可以從Web,從文件中獲取數(shù)據(jù),然后將這些數(shù)據(jù)保存到Oracle數(shù)據(jù)庫中,在Oracle數(shù)據(jù)庫上進(jìn)行數(shù)據(jù)的進(jìn)一步分析。
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python常見數(shù)據(jù)庫操作技巧匯總》、《Python編碼操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設(shè)計有所幫助。
- 詳解使用Python寫一個向數(shù)據(jù)庫填充數(shù)據(jù)的小工具(推薦)
- Python操作MySQL數(shù)據(jù)庫9個實(shí)用實(shí)例
- python Django連接MySQL數(shù)據(jù)庫做增刪改查
- python連接oracle數(shù)據(jù)庫實(shí)例
- Python如何讀取MySQL數(shù)據(jù)庫表數(shù)據(jù)
- 跟老齊學(xué)Python之使用Python查詢更新數(shù)據(jù)庫
- Python操作MongoDB數(shù)據(jù)庫PyMongo庫使用方法
- Python MySQL數(shù)據(jù)庫連接池組件pymysqlpool詳解
- Python基于Pymssql模塊實(shí)現(xiàn)連接SQL Server數(shù)據(jù)庫的方法詳解
- python通用數(shù)據(jù)庫操作工具 pydbclib的使用簡介
相關(guān)文章
Python StringIO及BytesIO包使用方法解析
這篇文章主要介紹了Python StringIO及BytesIO包使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06總結(jié)用Pdb庫調(diào)試Python的方式及常用的命令
大家都知道Python是自帶Pdb庫,使用Pdb調(diào)試Python程序還是很方便的。但是遠(yuǎn)程調(diào)試、多線程,Pdb是搞不定的,下面一起來看看用Pdb庫調(diào)試Python的方式及常用的命令。2016-08-08Tensorflow 自帶可視化Tensorboard使用方法(附項目代碼)
這篇文章主要介紹了Tensorflow 自帶可視化Tensorboard使用方法(附項目代碼),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02tensorflow實(shí)現(xiàn)讀取模型中保存的值 tf.train.NewCheckpointReader
今天小編就為大家分享一篇tensorflow實(shí)現(xiàn)讀取模型中保存的值 tf.train.NewCheckpointReader,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02