導航:首頁 > 編程語言 > python3連接oracle

python3連接oracle

發布時間:2022-12-27 16:11:32

『壹』 python3連接oracle報錯

python3連接oracle報錯
# -*- coding:utf-8 -*-
#!/usr/bin/env python
'''
Created on 2014年8月4日

@author: 188007

連接Oracle資料庫的class
'''
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
import cx_Oracle
import sys

class Oracle:
'''
python access oracle helper tool class
'''

def __init__(self, ip,port,db,user,pwd):
self.ip = ip
self.port = port
self.db = db
self.user = user
self.pwd = pwd

def __GetConnect(self):
""" 得到連接信息 返回: conn.cursor() """
if not self.db:
raise(NameError,"沒有設置資料庫信息")
dsn=cx_Oracle.makedsn(self.ip,self.port,self.db)
self.conn=cx_Oracle.connect(self.user,self.pwd,dsn)
cur = self.conn.cursor()
if not cur:
raise(NameError,"連接資料庫失敗")
else:
return cur

def ExecQuery(self,sql):
""" 執行查詢語句 返回的是一個包含tuple的list,list的元素是記錄行,tuple的元素是每行記錄的欄位
調用示例:
oracle = Oracle('10.27.95.253','1561','GFDMS','GFITAPPS','GFITAPPS')
resList = oracle.ExecQuery("SELECT OBJID,NUMCODE,AREACODE,AREANAME,PROVCODE,PROVNAME,CITYCODE,CITYNAME,TOWNCODE,TOWNNAME,REMARK FROM GFDMS.THZONE ORDER BY NUMCODE")
for (AREANAME) in resList:
print str(AREANAME).decode('gb2312')
"""
try:
cur = self.__GetConnect()
cur.execute(sql)
resList = cur.fetchall()

#查詢完畢後必須關閉連接
self.conn.close()
except Exception, err:
sys.exit(1)

return resList

def ExecNonQuery(self,sql):
""" 執行非查詢語句
調用示例:
oracle.ExecNonQuery("insert into THZONE values('x','y')")
"""
try:
cur = self.__GetConnect()
cur.execute(sql)
self.conn.commit()
self.conn.close()
except Exception, err:
sys.exit(1)

# def main():
# # oracle = Oracle('10.27.95.253','1561','GFDMS','GFITAPPS','GFITAPPS')
# # #返回的是一個包含tuple的list,list的元素是記錄行,tuple的元素是每行記錄的欄位
# # oracle.ExecNonQuery("insert into THZONE values('x','y')")
# oracle = Oracle('10.27.95.253','1561','GTEST','GTAPPS','GTAPPS')
# resList = oracle.ExecQuery("SELECT OBJID,NUMCODE,AREACODE,AREANAME,PROVCODE,PROVNAME,CITYCODE,CITYNAME,TOWNCODE,TOWNNAME,REMARK FROM GTEST.THZONE ORDER BY NUMCODE")
# for (AREANAME) in resList:
# print str(AREANAME).decode('utf-8')
#
# if __name__ == '__main__':
# main()

『貳』 如何在Python環境下連接Oracle資料庫

首先下載驅動

(cx_Oracle) 要注意一下版本 根據你的情況加以選擇

安裝

執行exe安裝程序就可以了 它會一個cx_Oracle pyd到{PYTHON_HOME}Libsite packages目錄下

執行一段測試程序 import cx_Oraclecon = nnect( xjtu_test xjtu world )cursor = con cursor()cursor close()con close()

里邊connect中的 個參數從左到右分別是 user pass TNS

那個TNS可以用Oracle客戶端工具中的Net Configuration Assistant來配置

參考cx_Oracle API

好了 執行那段測試代碼時你肯定遇到問題了 一般會有以下問題

【 】import cx_Oracle 時報告找不到OCI DLL

到裝了Oracle的機器上找一個 然後到{PYTHON_HOME}Libsite packages目錄下就可以了

【 】nnect 時報告RuntimeError Unable to acquire Oracle environment handle

這個問題相對比較麻煩 按以下步驟來解決 (可能不需要所有的步驟 我沒有確認 不過把以下步驟都執行了 確實問題就解決了)

首先 確認你是在控制台下邊來執行這個python腳本的 而不是某些ide 例如 PyDev(它們似乎無法載入os的環境變數)

其實 在本機安裝Oracle(只安客戶端工具就可以了)

lishixin/Article/program/Oracle/201311/17797

『叄』 python打包以後不能連接orcle資料庫怎麼辦

應該是少了某些文件
前言

Python自帶的模塊中有很多操縱文件的。我們可以把文件的數據讀出來,經過處理還可以將數據寫入文件中。但是對於數據的管理和分析來說,資料庫還是專業一些。如果Python能和資料庫結合在一起,那麼就能結合兩種的優勢,提高效率。

工作中使用的是Oracle資料庫,Python有一個模塊cx_Oracle可以與Oracle相連。要使用cx_Oracle,就要先下載。

1. 下載cx_Oracle

Python一個官方網站PyPI,上面有豐富的模塊。cx_Oracle就可以在PyPI中下載。打開PyPI的,在裡面搜索cx_Oracle,即可找到該模塊。當然也可以通過其它的途徑下載。

下載之後就可以使用了。

2. 使用流程

簡單的使用流程如下:

1.引用模塊cx_Oracle
2.連接資料庫
3.獲取cursor
4.使用cursor進行各種操作
5.關閉cursor
6.關閉連接

下面是一個簡單的例子:

import cx_Oracle #引用模塊cx_Oracle
conn=cx_Oracle.connect('load/123456@localhost/ora11g') #連接資料庫
c=conn.cursor() #獲取cursor
x=c.execute('select sysdate from al') #使用cursor進行各種操作
x.fetchone()
c.close() #關閉cursor
conn.close() #關閉連接

3. 幾種用法

Python對資料庫的操作主要有2方面:一個是寫數據,一個是讀數據。這2個方面的實現可以通過SQL語句實現,也可以通過存儲過程實現。所以cx_Oracle的主要用法有:

1. 執行SQL語句

2. 調用存儲過程和函數。

4. 執行SQL語句

執行SQL語句很簡單,從上面的例子就可以看出。使用cursor.execute即可執行。使用fetchone或fetchall即可將執行結果讀出來。

下面一個例子是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的動態SQL一樣,都是冒號將佔位符,即代碼中的:1,對變數的復制就是傳入一個List,即代碼中的['nice']。有多少個變數,list中就應該對應多少個值,數目要一致,否則會報錯。

執行之後,可以使用連接的一個方法connect.commit(),將事務提交。

5. 調用存儲過程和方法

直接上代碼:

--存儲過程代碼:
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()

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

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

調用函數使用的方法是cursor.callfunc。這個與調用存儲過程不同之處在於,它需要指定傳輸參數的類型。

結束

通過cx_Oracle,可以是Python與Oracle資料庫相互溝通,這樣兩者就可以長處互補。

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

『肆』 python連接oracle資料庫報出 ORA-12541: TNS: 無監聽程序

方法一:
在oracle_home下找到lsnrctl.exe 輸入 start
方法二
可能認不到實例名
在cmd下運行
set oracle_sid=自己資料庫的實例名(大多數orcl)
網上還有很多解決辦法
也許不見得管用,這種問題具體問題具體分析比較好。介紹的這2種您的機器還不行。就去修改一個TNSNAMES.ORA。

『伍』 如何使用Python連接Oracle資料庫

  1. 下載cx_Oracle,下載之後就可以使用了。

  2. 簡單的使用流程如下:

  3. 1.引用模塊cx_Oracle
    2.連接資料庫
    3.獲取cursor
    4.使用cursor進行各種操作
    5.關閉cursor
    6.關閉連接

    參考代碼:

    import cx_Oracle #引用模塊cx_Oracle
    conn=cx_Oracle.connect('load/123456@localhost/ora11g') #連接資料庫
    c=conn.cursor() #獲取cursor
    x=c.execute('select sysdate from al') #使用cursor進行各種操作
    x.fetchone()
    c.close() #關閉cursor
    conn.close() #關閉連接

『陸』 python 3.6怎麼連接oracle

1、Python
為Python配置環境變數
2、setuptools
把頁面上的代碼一份保存為ez_setup.py
執行:D:\>ez_setup.py
為setuptools配置環境變數 !

閱讀全文

與python3連接oracle相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:962
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:144
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:736
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:484
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163