Python中通過cx_Oracle訪問數據庫遇到的問題總結


以下是Python中通過cx_Oracle操作數據庫的過程中我所遇到的問題總結,感謝我們測試組的前輩朱勃給予的幫助最終解決了下列兩個問題:
    1)安裝cx_Oracle會遇到的問題:在Windows下安裝cx_Oracle不要嘗試用pip install的方式了!下載官網的對應版本的msi安裝文件,我的python2.7是32位的,oracle的instantClient也是32位的,這個cx_Oracle也選擇32位的下載,安裝成功后進入python模式下import cx_Oracle沒問題,安裝成功。
  
    2)使用cx_Oracle會遇到的問題:在通過cx_Oracle訪問數據庫的過程中,如果出現“InterfaceError: Unable to acquire Oracle environment handle”的錯誤!把oracle客戶端的所有文件拷貝到“D:\Python27\Lib\site-packages”即Python的安裝路徑根目錄下(因為不知道具體要拷貝哪些,就全拷貝了),如下圖所示:
  
  
以下是通過cx_Oracle遠程訪問oracle數據庫的方式(保存在本地文件夾下的execute_sql.py文件中):
# -*- coding: utf-8 -*-
import cx_Oracle

def interact_db(userInfo,dbStr,sql):
    connStr = userInfo + dbStr 
    conn = cx_Oracle.connect(connStr)    
    c = conn.cursor()                                       
    c.execute(sql)
    if sql.startswith('select'):
        fir=c.fetchall()
        conn.commit()             
        c.close()                                 
        conn.close()
        return fir
    else:
        conn.commit()             
        c.close()                                 
        conn.close()

def exec_sql(userInfo,dbStr,sql):
    if sql.startswith('select'):
        results = interact_db(userInfo,dbStr,sql)
        return results
    else:
        interact_db(userInfo,dbStr,sql)

userInfo這個變量里存的是用戶信息,格式為'用戶名/密碼';

dbStr變量里存的是數據庫連接字符串,格式為'@HOST:PORT/SERVICE_NAME'。例子如下:
dbStr = '@20.129.340.851:8885/test'
userInfo = 'userName/passWord'
用戶名密碼后面那些信息(數據庫連接字符串)可在本地oracle客戶端文件夾下的“TNSNAMES.ORA”文件中查看,如下圖位置所示:

之后在其他的腳本中就可以調用這個數據庫訪問腳本來實現對數據庫的操作了。例子如下:

# -*- coding: utf-8 -*-
from execute_sql import exec_sql

dbStr = '@HOST:PORT/SERVICE_NAME'
userInfo = 'username/password'

#查詢
dbSql = 'select xx from xxx where a like \'%aaa%\''
r = exec_sql(userInfo,dbStr,dbSql)
tip  = u'XXXXXXX:'+r[0][0]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM