一、庫連接步驟
1、下載cx_Oracle模塊
下載步驟
工具 pycharm :File--->右鍵setting--->找到Project Interpreter ----->在此位置搜索下載相應的模塊進行下載即可
搜索想要安裝的模塊,選中之后Install package即可
2、python連接代碼編寫
前提:虛擬機上的window7上32位的Oralce11.2.0版本的數據庫、表Python_Oracle ,以及表中有一些測試數據
""" --------------------------------------- Author:Zjh Date: 2019-09-23 15:51 --------------------------------------- """ import cx_Oracle #連接Oracle數據庫 class Connection(): def OracleConn(self): # xnj = """ # (DESCRIPTION = # (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.27.4)(PORT = 1521)) # (CONNECT_DATA = # (SERVER = DEDICATED) # (SERVICE_NAME = orcl) ) # ) # """ #建立Oracle遠程連接 # highway=cx_Oracle.connect('api_work','apiwork@1234',xnj) highway=cx_Oracle.connect('*****','**apiwork@1234**','192.168.27.4:1521/orcl') #獲取cursor光標 cursor=highway.cursor() #數據庫操作 #1.查詢 sql='select * from Python_Oracle' result=cursor.execute(sql) print('type of result',type(result)) #為了觀察數據庫查詢語句執行的結果是什么類型的 print("Number of rows returned: %d" % cursor.rowcount) for i in result: #循環遍歷,查詢得到的結果集 print(i) #1.插入操作 cursor.close() highway.close() pass pass if __name__=='__main__': connection = Connection() connection.OracleConn()
查詢結果:
二、遇到的問題以及解答
問題1、剛剛在進行完上面的安裝cx_Oracle模塊的時候遇到的問題:自己按照上面的步驟進行了Install package,之后引入的時候卻有錯誤提示,說是還沒有相應的模塊,
原因:引入方式正確,但是需要稍微的等待一段時間,等待pycharm真正的完全的安裝完成,pycharm 的下方有相應的正在加載的提示。。。。modules loading
等待加載或者下載完畢即可消除錯誤提示
問題2、編寫完上述的python代碼之后,嘗試運行,結果報錯
python連接oracle數據庫報錯
"DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: "
解決方案:
1)
根據錯誤提示:得知是64位的Oracle Client無法被加載,這里的原因是沒有安裝64位版的Oracle客戶端
下載安裝64位版的Oracle Client 地址連接:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html
我下載的版本是:
下載完畢之后,將zip包解壓到D:/下面,形成一個D:\instantclient_11_2 的文件夾,下面是zip包中的內容
2)配置系統環境變量
a:NLS_LANG 值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 為了防止中文亂碼
b: ORACLE_HOME 值:D:\instantclient_11_2 ORACLE_HOME下則是ORACLE的命令、連接庫、安裝助手、listener等等一系列的東東,其實配置這個 變量是為了在path中去%ORACLE_HOME%使用,如果沒有這個變量也可以,
c: TNS_ADMIN 值:D:\instantclient_11_2
d: path 值:D:\instantclient_11_2 為了在哪里都能找到可執行的Oracle客戶端下面的可執行程序
path 圖示
最后重啟pycharm,運行代碼即可查詢成功
問題解決
問題三、可能大家理解也有這樣的誤區:為什么解壓了客戶端形成了一個目錄D:\instantclient_11_2 就可以成功訪問連接數據庫
原因,python會從環境變量path中去找客戶端中的一些.dll包,所以需要配置環境變量 path =.......D:\instantclient_11_2
因為
b: ORACLE_HOME 值:D:\instantclient_11_2 ORACLE_HOME下則是ORACLE的命令、連接庫、安裝助手、listener等等一系列的東東,其實配置這個
變量是為了在path中去%ORACLE_HOME%使用,如果沒有這個變量也可以,只要在path中配置了安裝的instantclient_11_2的根路徑即可
第一個環境變量是為了python找到為了連接Oracle所下載的客戶端,
為了python找到為了連接Oracle所下載的客戶端目錄
並沒有tnsnames.ora
listener.ora等文件
第二個是為了使得在cmd下的任何位置都可以執行Oracle客戶端下的可執行命令如sqlplus等
有tnsnames.ora
listener.ora等文件
具體的都叫oracle客戶端,但是他們的區別是???????
還有一點需要注意的,當我們第一次安裝了Oracle的客戶端也就是圖二的那種,在plsql dev中的首選項中會選擇一個客戶端的安裝根目錄和其下的一個oci.dll文件,這個和客戶端的環境變量是沒有關系的,
因為這里已經指定了路徑了,也就是![]()
中的第一項可以不配置,配置僅僅是為了能在dos的任何目錄下去執行那些Oracle10g下的可執行命令