国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python使用cx_Oracle模塊操作Oracle數(shù)據(jù)庫詳解

2020-01-04 15:09:53
字體:
供稿:網(wǎng)友

本文實(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_Oracleconn=cx_Oracle.connect('load/123456@localhost/ora11g')  #連接數(shù)據(jù)庫c=conn.cursor()                      #獲取cursorx=c.execute('select sysdate from dual')          #使用cursor進(jìn)行各種操作x.fetchone()c.close()                         #關(guān)閉cursorconn.close()                       #關(guān)閉連接

例子:

#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對數(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_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的動態(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) 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()

調(diào)用存儲過程使用的是cursor.callproc方法。上面的存儲過程中,一個變量的值是OUT型的,在Python中,對OUT型的變量賦值,主要該變量的長度不能小于存儲過程中的。

--函數(shù)代碼: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()

調(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)一步分析。

希望本文所述對大家Python程序設(shè)計有所幫助。


注:相關(guān)教程知識閱讀請移步到python教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 九寨沟县| 新乐市| 福清市| 合江县| 克东县| 安康市| 鄂伦春自治旗| 台南市| 丰原市| 唐河县| 叶城县| 响水县| 通州区| 嫩江县| 井冈山市| 南召县| 河西区| 香河县| 德钦县| 扶余县| 饶河县| 金沙县| 灵宝市| 万安县| 鄂托克前旗| 泸水县| 许昌市| 高密市| 万年县| 尼勒克县| 赞皇县| 登封市| 财经| 北海市| 渝北区| 靖西县| 大宁县| 玉门市| 佳木斯市| 巍山| 建瓯市|