专栏首页python3python连接oracle配置

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()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python基础一(认识python及基

    这个博客的就是笔者用来作总结的,只会写出一些必要的东西,所以并不适合一个初学者看

    用户2398817
  • 用Python如何操作Oracle

    Python没有自带oracle驱动,cx_Oracle可以实现Python访问oracle的目的,如果要访问Oracle,首先要下载安装cx_Oracle。下...

    用户2398817
  • 用户交互input

    input() 函数 接收到的都是str,如果输入为数字,打印结果想进行运算,此时需要转义. 语法: 内容=input("提示信息") 这里可以直接获取到用户...

    用户2398817
  • lambda 表达式和闭包

    区分lambda表达式和闭包 熟悉的Javascript或者Ruby的同学,可能对另一个名词:闭包更加熟悉。因为一般闭包的示例代码,长得跟lambda差不多,导...

    用户1257393
  • Oracle:ODP.NET Managed 小试牛刀

    “ODP.NET Managed”发布已经有一段时间了,近期正好有一个新项目,想尝试用一下,参考园子里的文章:《.NET Oracle Developer的福音...

    菩提树下的杨过
  • MVC3教程之实体模型和EF CodeFirst

      在本节中,我们将使用Entity Framework 数据访问技术来定义这些模型类,并对这些类来进行操作。EF支持一个被称之为“code-first”的开发...

    thz
  • 以色列国防电子为瑞士军队提供Hermes 900无人机

    以色列国防电子公司Elbit系统宣布,被选为瑞士武装部队新无人机系统供应商。其Hermes 900无人机将于2020年前取代当前自2001年起服役的ADS 95...

    机器人网
  • 腾讯安全专家周斌:“安全”是场要耐得住寂寞的马拉松

    腾讯云安全
  • 谷歌推出云医疗API,帮助医疗机构发展机器学习

    近日、谷歌将医疗保健行业引入云里的步骤,其中包括新的云医疗保健API、更多符合HIPAA标准的产品及新的合作伙伴关系。 ? 人工智能和物联网等技术也会像云计算一...

    BestSDK
  • 前端组件整理

    用户2930719

扫码关注云+社区

领取腾讯云代金券