欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2018年05月07日 11:22:09   作者:my2010sam  
這篇文章主要介紹了Python使用cx_Oracle模塊操作Oracle數(shù)據(jù)庫,結(jié)合實例形式較為詳細的分析了cx_Oracle模塊的下載、安裝及針對Oracle數(shù)據(jù)庫的連接、執(zhí)行SQL語句、存儲過程等相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了Python使用cx_Oracle模塊操作Oracle數(shù)據(jù)庫。分享給大家供大家參考,具體如下:

ORACLE_SID參數(shù),這個參數(shù)是操作系統(tǒng)中用到的,它是描述我們要默認連接的數(shù)據(jù)庫實例,對于一個機器上有多個實例的情況下,要修改后才能通過 conn / as sysdba連接,因為這里用到了默認的實例名。

簡而言之,打個比方,你的名字叫小明,但是你有很多外號。你父母叫你小明,但是朋友都叫你的外號。

這里你的父母就是oracle實例,小明就是sid,service name就是你的外號。

sid用于實例區(qū)分各個數(shù)據(jù)庫,service name用于外部鏈接。 它們可能是不同的,要注意你得到的是哪個名字,合理使用,否則遠程連接別的數(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/。當然也可以通過其它的途徑下載。

下載之后就可以使用了。

2. 使用流程

簡單的使用流程如下:

①.引用模塊cx_Oracle
②.連接數(shù)據(jù)庫
③.獲取cursor
④.使用cursor進行各種操作
⑤.關(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進行各種操作
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個方面的實現(xiàn)可以通過SQL語句實現(xiàn),也可以通過存儲過程實現(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ù)庫相互溝通,這樣兩者就可以長處互補。

比如,可以將Python當成一個數(shù)據(jù)收集的工具,可以從Web,從文件中獲取數(shù)據(jù),然后將這些數(shù)據(jù)保存到Oracle數(shù)據(jù)庫中,在Oracle數(shù)據(jù)庫上進行數(shù)據(jù)的進一步分析。

更多關(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īng)典教程》及《Python文件與目錄操作技巧匯總

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

相關(guān)文章

  • python獲取交互式ssh shell的方法

    python獲取交互式ssh shell的方法

    今天小編就為大家分享一篇python獲取交互式ssh shell的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python pathlib模塊使用方法及實例解析

    Python pathlib模塊使用方法及實例解析

    這篇文章主要介紹了Python pathlib模塊使用方法及實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • 用python實現(xiàn)域名資產(chǎn)監(jiān)控的詳細步驟

    用python實現(xiàn)域名資產(chǎn)監(jiān)控的詳細步驟

    域名資產(chǎn)監(jiān)控,通過輸入一個主域名,找到該域名對應(yīng)的ip地址所在的服務(wù)器的端口開閉情況,本文重點給大家介紹用python實現(xiàn)域名資產(chǎn)監(jiān)控的問題,需要的朋友可以參考下
    2021-11-11
  • 淺析Python模塊之間的相互引用問題

    淺析Python模塊之間的相互引用問題

    這篇文章主要介紹了Python模塊之間的相互引用問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 基于python實現(xiàn)智能用例生成工具

    基于python實現(xiàn)智能用例生成工具

    這篇文章主要為大家詳細介紹了如何基于python實現(xiàn)智能用例生成工具,即根據(jù)輸入的功能點,生成通用測試點,感興趣的小伙伴可以跟隨小編一起了解下
    2023-09-09
  • 淺談python jieba分詞模塊的基本用法

    淺談python jieba分詞模塊的基本用法

    本篇文章主要介紹了淺談python jieba分詞模塊的基本用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 詳解Python中的GIL(全局解釋器鎖)詳解及解決GIL的幾種方案

    詳解Python中的GIL(全局解釋器鎖)詳解及解決GIL的幾種方案

    這篇文章主要介紹了詳解Python中的GIL(全局解釋器鎖)詳解及解決GIL的幾種方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python迭代器實例簡析

    python迭代器實例簡析

    這篇文章主要介紹了python迭代器,以一個簡單實例的形式分析了Python中迭代器的用法及注意事項,需要的朋友可以參考下
    2014-09-09
  • python使用Berkeley DB數(shù)據(jù)庫實例

    python使用Berkeley DB數(shù)據(jù)庫實例

    這篇文章主要介紹了python使用Berkeley DB數(shù)據(jù)庫的方法,以實例形式講述了完整的操作過程,并總結(jié)了具體的操作步驟,非常具有實用性,需要的朋友可以參考下
    2014-09-09
  • 解決Python字典寫入文件出行首行有空格的問題

    解決Python字典寫入文件出行首行有空格的問題

    下面小編就為大家?guī)硪黄鉀QPython字典寫入文件出行首行有空格的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論