本文實例講述了Python操作Oracle數據庫的簡單方法和封裝類。分享給大家供大家參考,具體如下:
最近工作有接觸到Oracle,發現很多地方用Python腳本去做的話,應該會方便很多,所以就想先學習下Python操作Oracle的基本方法。
考慮到Oracle的使用還有一個OracleClient的NetConfig的存在,我覺得連接起來就應該不是個簡單的事情。
果然,網上找了幾個連接方法,然后依葫蘆卻畫了半天,卻也不得一個瓢。
方法1:用戶名,密碼和監聽分別作為參數
conn=cx_Oracle.connect('用戶名','密碼','數據庫地址:數據庫端口/SID')根據我看的幾篇文章和我寫代碼出錯的提示,我找到了python連接數據庫的配置項應該和Oracle客戶端的配置文件tnsnames.ora有關。但是我的配置項并沒有SID項,而且一開始我也不知SID是個什么東西,網上寫什么我就跟著寫,所以這種方法失敗了。后來想通了要在配置項加一個SID,然后想想這個東西配置完了我系統是不是要重啟啊。所以,先看看其他方法吧….
方法2:用戶名,密碼和監聽共同作為一個參數
conn=cx_Oracle.connect('用戶名/密碼@數據庫地址:數據庫端口/SID')這個方法基本和方法一一樣,換湯不換藥…
方法3:使用tns配置信息
conn=cx_Oracle.connect('用戶名','密碼',tns)網上的代碼獲取tns是用函數做的,依然會使用SID,但是..我已經可以用的配置項并沒有SID啊,所以使用
tns=cx_Oracle.makedsn('數據庫地址','數據庫端口', 'SID')依舊不行,但是看看這個tns的生成方法和上面的兩種方法差不多的。但是我發現我隨便輸入一個SID后生成的數據是這樣的。
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SID=XE)))
然而,我的客戶端的配置項大概是這樣的,
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=KGDB)))
我擦,好像長得一樣的,類型也都是字符串類型的,試試直接把我文件里的配置項賦值給tns試試。
tns = '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=KGDB)))'conn = cx_Oracle.connect('nicker', '123456', tns)嗯。成功了~
最后,貼一個基本使用方法全代碼
#coding:utf-8import cx_Oracle# 創建數據庫連接# cx_Oracle.connect('username','pwd','ora的tns信息')# oracle數據庫的tns信息,從tnsnames.ora中找到plsql可用的配置項,將該配置項直接拷貝過來即可ora_tns = '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=KGDB)))'conn = cx_Oracle.connect('nicker', '123456', ora_tns)# 操作游標cursor = conn.cursor()# 執行查詢cursor.execute("SELECT * FROM inst_info")# 獲取返回信息rs = cursor.fetchall()# 輸出信息for v in rs: print v#關閉連接,釋放資源cursor.close()conn.close()
新聞熱點
疑難解答