Python連接Oracle失敗
#1 環境
macOS 10.15.5 Catalina
Oracle for docker (oracleinanutshell/oracle-xe-11g)
Python 3.8.1 (要確保Python是64bit的)
#2 問題
- 在Docker中使用Oracle容器
- 在本地電腦沒有安裝Oracle客戶端,導致Python連接Oracle失敗
報錯信息 :
sqlalchemy.exc.DatabaseError: (cx_Oracle.DatabaseError) DPI-1047: Cannot locate a 64-bit Oracle Client library: "dlopen(libclntsh.dylib, 1): image not found". See https://oracle.github.io/odpi/doc/installation.html#macos for help
(Background on this error at: http://sqlalche.me/e/4xp6)
#3 解決
#3.1 下載客戶端插件
https://www.oracle.com/database/technologies/instant-client/macos-intel-x86-downloads.html#ic_osx_inst
下載以下兩個版本的客戶端
- instantclient-basic-macos.x64-19.3.0.0.0dbru.zip
- instantclient-basic-macos.x64-11.2.0.4.0.zip
說明 : 因爲我用的是Mac, 在安裝過程中, 發現僅僅安裝19.3版本的並不能解決問題,還需要安裝11.2版本的客戶端, 其他系統暫時沒用嘗試過
#3.2 安裝
- 解壓文件
我這裏試講文件解壓在 ~/instantclient_19_3
目錄下
unzip instantclient-basic-macos.x64-19.3.0.0.0dbru.zip
unzip instantclient-basic-macos.x64-11.2.0.4.0.zip
#3.3 設置軟連接
mkdir ~/lib
ln -s ~/instantclient_19_3/libclntsh.dylib ~/lib/
cp ~/instantclient_19_3/instantclient_11_2/{libclntsh.dylib.11.1,libnnz11.dylib,libociei.dylib} ~/lib/