环境信息:
python:2.7.9 windows 64位
cx_Oracle: 5.3 - 11g windows64位
oracle:11g windows64位
环境变量配置:
ORACLE_HOME=F:\oracleclient\x64\instantclient-basic-windows.x64-11.2.0.4.0\instantclient_11_2/
PATH=%PATH%;%ORACLE_HOME%
测试代码:
import cx_Oracle
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
#导入模块
if __name__ == '__main__':
# con = cx_Oracle.connect('scott', 'tiger', '192.168.1.243/SCOTT') #创建连接
print(os.getcwd())
ip = "192.168.1.1"
port = "1521"
dbname = "SCOTT"
sid = "GLOBLE"
dsn = "(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = "+ip+")(PORT = "+port+"))(CONNECT_DATA =(SID = "+sid+")))"
user = "scott"
password = "tiger"
con = cx_Oracle.connect(user, password, dsn, encoding="UTF-8")
cursor = con.cursor() #创建游标
cursor.execute( "SELECT HJ_ID,HJ_FILEPATH FROM DMYD_VOLTE_VOICE_DATA.HJ_FILEPATH") #执行sql语句
data = cursor.fetchone() #获取一条数据
print(data) #打印数据
cursor.close() #关闭游标
con.close() #关闭数据库连接
报错信息:
Traceback (most recent call last):
File "main.py", line 17, in <module>
con = cx_Oracle.connect(user, password, dsn, encoding="UTF-8")
cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle
分析与解决:
网上大部分解决方案:将Instant Client Package中的dll全部拷贝至 D:\Python27\Lib\site-packages目录下。我拷过去并没有什么用。
觉得有可能是接口不兼容,于是我尝试换了个cx_Oracle版本:cx_Oracle-5.2-11g。然后就可以了。
参考文章: