前兩天公司需要, 我用Python通過Oracle客戶端instanceclient對接Oracle,遇到了一些問題:
提前一個小問題:
Python連接Oracle需要一個第三方庫:cx_Oracle 而這個庫直接pip3 install 安裝不了, 或者即使安裝上了,也會版本不對,所以這就需要去pipy官網上去下載與你的系統,python對應版本位數的cx_Oracle
下載地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
因爲我的系統和Python都是64位,Python是3.6版本 所以下載紅色標記出來的這個版本, 下載到你的Python安裝包下面的Lib下面的site-pakeage(pakeage好像拼錯了, 無所謂), 接着在site-pakeage目錄下打開dos命令行, pip3 install cx_Oracle_7.3.0_cp36。。。.whl就能安裝上了
問題一:
cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "D:\pi_sql\pl_sql\instantclient_11_21\instantclient_11_2\oci.dll is not the correct architecture
簡單來說就是: cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: oci.dll is not the correct architecture
原因:遇到這個問題, 沒別的原因, 就是你Oracle客戶端instanceclient, 系統, Python 三者版本位數不對應,我的原因是我係統和Python都是64位,而Oracle客戶端instanceclient別人給我的是32位, 所以怎麼着都不行, 後來又給我64位的客戶端 就行了
解決方法: 把原來的instanceclient卸載了,選擇一個明確與你的系統, Python版本尾數相同的Oracle客戶端instanceclient, Python和系統版本好查看, instance客戶端不好查看
查看Python版本:
查看系統版本:右擊計算機------->屬性 往下找:
我的系統和Python都是64位, 那就確定是客戶端instanceclient版本位數不對, 所以卸載原來的, 下一個明確是64位的instanceclient客戶端就好了
問題二:
Python 連接 Oracle 數據庫時報錯: 64-bit Oracle Client library cannot be loaded:
原因:是因爲你沒有配置環境變量, 將你instanceclient客戶端中oci.dll所在的目錄路徑添加到華寧變量path中就好了
我的路徑是這樣:
添加到環境變量path中就好
問題三:
cx_Oracle.DatabaseError: ORA-12560: TNS: 協議適配器錯誤
原因:你連接Oracle的時候, 沒有寫入用戶名密碼和端口
就像這樣, 就會報這個錯誤:
加上你的用戶名密碼端口就好了:
問題四:
cx_Oracle.DatabaseError: ORA-12170: TNS: 連接超時
原因:如果你是本地Oracle這樣, 這個網上一搜一大把解決辦法。而我的Oracle是在公司服務器上的, 所以需要公司的內網, 我連接超時的原因只是我忘了插公司的網線............