cx_Oracle连接python3.5
问题描述:
我试了几次尝试连接Oracle DB,但仍无法连接。以下是我的代码连接。
$ sqlplus64 uid/[email protected]:1521/WSVCcx_Oracle连接python3.5
- 我的环境现状:Ubuntu的16.04/64位/ Python3.5
我希望您能分享与此问题相关的知识和经验。谢谢。
import os
os.chdir("/usr/lib/oracle/12.2/client64/lib")
import cx_Oracle
# 1st attempt
ip = '192.168.0.5'
port = 1521
SID = 'WSVC'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)
# dsn_tns = cx_Oracle.makedsn(ip, port, service_name=SID)
db = cx_Oracle.connect('uid', 'passwd', dsn_tns)
cursor = db.cursor()
-------------------------------------------------
# 2nd attempt
conn = "uid/[email protected](DESCRIPTION=(SOURCE_ROUTE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.5)(PORT=1521)))(CONNECT_DATA=(SID=WSVC)(SRVR=DEDICATED)))"
db = cx_Oracle.connect(conn)
cursor = db.cursor()
------------------------------------------------------
# ERROR Description
cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle
答
错误“无法获取Oracle环境句柄”是由于您的Oracle配置不正确。有几件事应该可以帮助你发现问题的根源:
- 使用Instant Client时,不要设置环境变量ORACLE_HOME;应该只在使用完整的Oracle客户端或Oracle数据库安装时设置
- LD_LIBRARY_PATH的值应该包含包含libclntsh.so的路径;您选择的值看起来是不正确的,应该改为/usr/lib/oracle/12.2/client64/lib
- 可以验证其Oracle客户端库正在使用ldd命令,如加载
ldd cx_Oracle.cpython-35m-x86_64-linux-gnu.so
+0
非常感谢您的帮助!我帮你解决了这个问题。如您所说,我已经将'/ lib'目录添加到LD_LIBRARAY_PATH的值。 –
+0
不客气! –
您使用的是什么版本的cx_Oracle?你设置了哪些环境变量(LD_LIBRARY_PATH,ORACLE_HOME)。 os.chdir()不应该出现在任何情况下! –
我正在使用cx_Oracle:5.3。我还在〜/ .bashrc文件中设置了以下内容:-------- ORACLE_HOME =/usr/lib/oracle/12.2/client64 export LD_LIBRARY_PATH =/usr/lib/oracle/12.2/client64:$ LD_LIBRARY_PATH export PATH =/usr/lib/oracle/12.2/client64:$ PATH –