python连接oracle配置-创新互联

环境:

为企业提供成都网站设计、网站建设、网站优化、成都营销网站建设、竞价托管、品牌运营等营销获客服务。创新互联拥有网络营销运营团队,以丰富的互联网营销经验助力企业精准获客,真正落地解决中小企业营销获客难题,做到“让获客更简单”。自创立至今,成功用技术实力解决了企业“网站建设、网络品牌塑造、网络营销”三大难题,同时降低了营销成本,提高了有效客户转化率,获得了众多企业客户的高度认可!

操作系统:win7 64位,CPU是inter的pc机

Oracle服务端:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

Oracle本地客户端:Release 11.2.0.1.0  32bit Production

Python版本:python2.7.5(安装路径:C:\Python27\)

cx_Oracle版本:cx_Oracle-5.2.1-11g.win-amd64-py2.7.exe

Iinstantclient版本:instantclient-basic-win-x86-64-11.2.0.1.0.zip

在学习python过程中,需要连接oracle数据库,所以要安装cx_Oracle。

安装cx_Oracle-5.2.1-11g.win-amd64-py2.7.exe,import cx_Oracle报错。提示:import cx_Oracle

ImportError: DLL load failed: %1 不是有效的Win32应用程序。根据报错提示应该是缺少dll文件,因为我本机oracle客户端是32位的,64位的cx_Oracle程序调用32位的动态库肯定会报错。

根据文章http://blog.csdn.net/huzhenwei/article/details/3946308指点,去oracle网站下载了instance client,地址是:

http://www.oracle.com/technology/software/tech/oci/instantclient/index.html。

我下载了instantclient-basic-win-x86-64-11.2.0.1.0.zip这个版本。

直接解压C:\instantclient_11_2 目录下。

在“环境变量”的“系统变量”中增加:

ORACLE_HOME = C:\instantclient_11_2 (网上说需要,但是测试不加也可以)

TNS_ADMIN = C:\instantclient_11_2  (网上说需要,但是测试不加也可以)
NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK
修改Path变量,在后面添加C:\instantclient_11_2

然后把解压包中的oci.dll文件放到%python_home%\Lib\site-packages 下,再次import不会报错了。

执行测试python脚本报错,提示cx_Oracle Interface Error: Unable to acquire Oracle enviroment handle。启动PLSQL登陆打开的是刚才的tns,但登陆就报错ORA-1以为是instance client和之前安装的32位oracle client冲突,ORA-12557。感觉是这个64位的instance client与之前装的32位oracle client冲突了。于是把环境变量里的ORACLE_PATH删掉,就可以登陆PLSQL了。但测试语句还是报那个错。折腾了半天,最后死马当活马医吧,尝试着把C:\instantclient_11_2里面的dll文件都拷贝到了python的C:\Python27\Lib\site-packages目录下,又RUN了一下,居然不报错了。 然后逐个删掉,最后发现oraociei11.dll删掉会报错,而其它dll删掉重新Run都不会报错。

不过使用PLSQL登陆还是会报错,只好把环境变量ORACLE_HOME删掉了,并不影响cx_Oracle的使用。原理不太清楚,先记录下来。

Python测试脚本:

#!/usr/bin/python #coding=utf-8 import cx_Oracle username = "smb" passwd = "czty_smb" host = "192.168.150.233" port = "1521" sid = "zsms" dsn = cx_Oracle.makedsn(host, port, sid) con = cx_Oracle.connect(username, passwd, dsn) cursor= con.cursor() sql = 'SELECT smbms, prtms  FROM t_user_mobile_dz' cursor.execute(sql) result = cursor.fetchall() print "Total: " + str(cursor.rowcount) for row in result: print row cursor.close() con.close()

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前名称:python连接oracle配置-创新互联
分享网址:http://scyanting.com/article/djipdg.html