设为首页 收藏本站
查看: 508|回复: 0

[经验分享] python中cx_Oracle模块安装遇到的问题与解决方法

[复制链接]

尚未签到

发表于 2016-8-4 12:29:35 | 显示全部楼层 |阅读模式
--===========================================================================
我的实践过程:
1,将oci.dll文件(从oracle安装目录搜索)复制到python安装目录的Lib\site-packages下,如 C:\Python26\Lib\site-packages
2,添加环境变量:
  ORACLE_HOME = D:\oracle\ora92;
  PATH = .;%PATH%;D:\oracle\ora92\bin;
  LD_LIBRARY_PATH = %LD_LIBRARY_PATH%;D:\oracle\ora92;
that is all~
--============================================================================

安装或使用cx_Oracle时,需要用到Oracel的链接库,如libclntsh.so.10.1,否则会有各种各样的错误信息。

     安装Oracle Instant Client就可得到这个链接库,避免安装几百兆之巨的Oracle Client。

软件下载地址:

cx_Oracle的主页:http://cx-oracle.sourceforge.net/

必需的Oracle链接库的下载地址:http://www.oracle.com/technology/software/tech/oci/instantclient/index.html

常见的错误和解决方法:


一.win32二进制安装

在windows下安装cx_Oracle-5.0-10g.win32-py2.6.msi之后,导入时,报DLL加载失败的错误,如下:

IDLE 2.6.1      
>>> import cx_Oracle

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import cx_Oracle
ImportError: DLL load failed: 找不到指定的程序。



解决方法:

从Oracle站点下载instantclient-basic-win32-10.2.0.4.zip,解压后,将其中的oci.dll文件复制到python安装目录的Lib\site-packages下,如 C:\Python26\Lib\site-packages

二.linux下二进制安装

在linux_x86_64下,安装cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm时报错。

[iyunv@BJ-UPDATE-01 ~]# rpm -ivh cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm
error: Failed dependencies:
        libclntsh.so.10.1()(64bit) is needed by cx_Oracle-5.0.1-1.x86_64

解决方法:

参考http://cx-oracle.sourceforge.net/BUILD.txt

从Oracle站点下载basic-10.2.0.4.0-linux-x86_64.zip到/opt目录并解压,会看到libclntsh.so.10.1在/opt/instantclient_10_2目录中

设置环境变量

vi /root/.bash_profile

增加如下两行:

export ORACLE_HOME=/opt/instantclient_10_2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
运行source /root/.bash_profile使改动生效

建立此链接库的符号链接

cd $ORACLE_HOME

ln -s libclntsh.so.x.x libclntsh.so

重新安装cx_Oracle

注意加--nodeps参数,否则还会报上述错误

[iyunv@BJ-UPDATE-01 ~]# rpm -ivh --nodeps cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm

三.linux下源代码安装

设置环境变量及符号链接如上,在linux_x86_64下源代码安装,运行python setup.py build,编译时错误信息如下:

Connection.c:1169: 警告:语句不起作用
Connection.c:1171: 错误:‘udt_Connection’ 没有名为 ‘environment’ 的成员
Connection.c:1172: 警告:传递参数 1 (属于 ‘Environment_CheckForError’)时在不兼容的指针类型间转换
Connection.c:1172: 警告:传递参数 2 (属于 ‘Environment_CheckForError’)时在不兼容的指针类型间转换
Connection.c:1172: 错误:提供给函数 ‘Environment_CheckForError’ 的实参太多
Connection.c:1176: 错误:‘udt_Connection’ 没有名为 ‘sessionHandle’ 的成员

  
--=======================================================
如何在 Python环境下连接Oracle数据库

1.首先下载驱动:

(cx_Oracle),要注意一下版本,根据你的情况加以选择。

[信息来自"岁月联盟"]

2.安装:

Syue.com

执行exe安装程序就可以了,它会copy一个cx_Oracle.pyd到{PYTHON_HOME}\Lib\site-packages目录下。 "岁月联盟"提供

3.执行一段测试程序: [来源"岁月联盟"]

import cx_Oracle
con = cx_Oracle.connect( "xjtu_test", "37343734","xjtu.world")
cursor = con.cursor()
cursor.close()
con.close() ["岁月联盟"]

里边connect中的3个参数从左到右分别是:user, pass, TNS。
[Syue.com]

那个TNS可以用Oracle客户端工具中的Net Configuration Assistant来配置。

[www.Syue.com]

4.参考cx_Oracle API [内容来自"岁月联盟"]

好了,执行那段测试代码时你肯定遇到问题了,一般会有以下问题:

[信息来源"岁月联盟"]

【1】import cx_Oracle 时报告找不到OCI.DLL:

信息来自"岁月联盟"

到装了Oracle的机器上找一个,然后copy到{PYTHON_HOME}\Lib\site-packages目录下就可以了。 资源来自"岁月联盟"

【2】cx_Oracle.connect 时报告RuntimeError: Unable to acquire Oracle environment handle: 信息来自"岁月联盟"

这个问题相对比较麻烦,按以下步骤来解决:(可能不需要所有的步骤,我没有确认,不过把以下步骤都执行了,确实问题就解决了)

[资源来自"岁月联盟"]

首先,确认你是在控制台下边来执行这个python脚本的。而不是某些ide,例如:PyDev(它们似乎无法载入os的环境变量)。

"岁月联盟"提供

其实,在本机安装Oracle(只安客户端工具就可以了)。
Syue.com

最后,添加以下环境变量:(注:换成你自己的路径) 资源来自"岁月联盟"

ORACLE_HOME=D:\Oracle\Ora81
PATH=D:\Oracle\Ora81\bin;{your_other_paths}

来源"岁月联盟"


完成。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-252734-1-1.html 上篇帖子: Oracle培训(三十)——Oracle 11g 第十章知识点总结——约束 下篇帖子: oracle 10g中的几个概念(表空…
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表