将Python连接到Oracle
我安装了Oracle客户端和Oracle客户端开发包,并且设置了ORACLE_HOME这个环境变量。但是当我尝试安装tux_oracle(用python setup.py build命令)时,出现了以下错误:致命错误:oci.h文件找不到。
3 个回答
1
我正在使用 cx_oracle 来连接我的Oracle数据库。你试过这个吗?
1
这个头文件可以在开发工具包里找到。出于某种原因,它没有包含在默认的安装包里。你可以看看这个链接:
http://my.opera.com/onyxluo/blog/cannot-find-oci-h-in-oracle9-2-client
为了方便你,我把页面内容也放在这里。我是从谷歌缓存里找到的,因为我去的时候那个页面已经打不开了。
这个问题的原因是因为在Oracle9.2客户端中没有安装OCI(Oracle调用接口)包。通常情况下,"oci.h"文件的默认路径是$ORACLE_HOME/rdbms/demo。这个问题在Oracle数据库9.2.0.1版本中不存在。但是在Oracle 9.2.0.1客户端中,即使你选择了完整的客户端安装包,OCI包也没有包含在内。
解决办法:
- 首先安装Oracle 9.2.0.1客户端。
- 在OUI(Oracle通用安装程序)中,使用与Oracle 9.2.0.1客户端相同的Oracle主目录,然后选择安装Oracle数据库。
- 在数据库安装中选择自定义安装。
- 取消勾选企业管理器、Oracle数据库和其他选项,只保留OCI和OCCI。
安装完OCI后,$ORACLE_HOME/rdbms/demo目录下会包含oci.h和其他*.h文件。
6
好的,答案是要安装 cx_Oracle,而不是 tx_Oracle。在 Ubuntu 系统上,步骤如下:
- 你需要在电脑上安装 Oracle 客户端。如果没有,可以从 Oracle 的网站上下载,链接是 http://www.oracle.com/technetwork/topics/linuxsoft-082809.html。
- 在你的电脑上安装 alien,这样你才能把 rpm 文件转换成 deb 文件:
sudo apt-get -i alien
- 把 rpm 文件转换成 deb 文件:
sudo alien -d oracle-instantclient11.2-sqlplus-11.2.0.2.0.i386.rpm
- 安装
sudo dpkg -i oracle-instantclient11.2-basic_11.2.0.2.0-2_i386.deb
- 在 /etc/profile.d 目录下设置 ORACLE_HOME 环境变量,创建一个名为 oracle.sh 的文件,文件内容需要包含:
export ORACLE_HOME=/usr/lib/oracle/11.2/client source oracle.sh
- 更新 LD_LIBRARY_PATH:
sudo vi /etc/ld.so.conf.d/oracle.conf which must contain: "$ORACLE_HOME/lib" sudo ldconfig
- 根据你使用的 Oracle 和 Python 的版本,从 http://cx-oracle.sourceforge.net/ 下载并安装 cx_Oracle。再次使用 alien 将 rpm 转换为 deb 并安装:
sudo alien -d cx_Oracle-5.1-11g-py32-1.i386.rpm sudo dpkg -i cx-oracle_5.1-2_i386.deb
- cx_Oracle 会安装在 /usr/lib/python2.7/dist-packages/ 目录下。你需要执行以下命令: sudo mv site-packages/cx_Oracle* dist-packages/ sudo rmdir site-packages/ sudo ln -s dist-packages site-packages
现在你应该可以顺利连接到 Oracle 数据库了。从 Python 中输入:
import cx_Oracle
要连接到数据库,需要在 tsnames.ora 文件中指定连接字符串,或者直接指定:
connection_string = 'username/password@(DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA= (SID=MY_SID)))'