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

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

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

本文實(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è)計有所幫助。

相關(guān)文章

  • Python StringIO及BytesIO包使用方法解析

    Python StringIO及BytesIO包使用方法解析

    這篇文章主要介紹了Python StringIO及BytesIO包使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • 總結(jié)用Pdb庫調(diào)試Python的方式及常用的命令

    總結(jié)用Pdb庫調(diào)試Python的方式及常用的命令

    大家都知道Python是自帶Pdb庫,使用Pdb調(diào)試Python程序還是很方便的。但是遠(yuǎn)程調(diào)試、多線程,Pdb是搞不定的,下面一起來看看用Pdb庫調(diào)試Python的方式及常用的命令。
    2016-08-08
  • Python進(jìn)程池基本概念

    Python進(jìn)程池基本概念

    這篇文章主要介紹了Python進(jìn)程池基本概念,當(dāng)創(chuàng)建的子進(jìn)程數(shù)量不多時,可以直接利用多處理進(jìn)程中的進(jìn)程動態(tài)形成需要的進(jìn)程,下文關(guān)于Python線程池的概念做詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-03-03
  • python自動化測試通過日志3分鐘定位bug

    python自動化測試通過日志3分鐘定位bug

    軟件開發(fā)中通過日志記錄程序的運(yùn)行情況是一個開發(fā)的好習(xí)慣,對于錯誤排查和系統(tǒng)運(yùn)維都有很大幫助,Python標(biāo)準(zhǔn)庫自帶了強(qiáng)大的logging日志模塊,在各種python模塊中得到廣泛應(yīng)用
    2021-11-11
  • python執(zhí)行shell腳本的四種方法

    python執(zhí)行shell腳本的四種方法

    在Python中提供了很多的方法可以調(diào)用并執(zhí)行shell腳本,本文主要介紹了python執(zhí)行shell腳本的四種方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 詳解python3中的真值測試

    詳解python3中的真值測試

    這篇文章主要介紹了詳解python3中的真值測試,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • python pyhs2 的安裝操作

    python pyhs2 的安裝操作

    這篇文章主要介紹了python pyhs2 的安裝操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Tensorflow 自帶可視化Tensorboard使用方法(附項目代碼)

    Tensorflow 自帶可視化Tensorboard使用方法(附項目代碼)

    這篇文章主要介紹了Tensorflow 自帶可視化Tensorboard使用方法(附項目代碼),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • python判斷一個集合是否為另一個集合的子集方法

    python判斷一個集合是否為另一個集合的子集方法

    下面小編就為大家分享一篇python判斷一個集合是否為另一個集合的子集方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • tensorflow實(shí)現(xiàn)讀取模型中保存的值 tf.train.NewCheckpointReader

    tensorflow實(shí)現(xiàn)讀取模型中保存的值 tf.train.NewCheckpointReader

    今天小編就為大家分享一篇tensorflow實(shí)現(xiàn)讀取模型中保存的值 tf.train.NewCheckpointReader,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02

最新評論