cx_Oracle.InterfaceError:无法在linux中获取Oracle环境句柄

时间:2016-10-20 12:16:34

标签: python oracle cx-oracle

我正在尝试使用cx_Oracle模块连接到数据库我收到以下错误

server_IP = ipaddress:1221/xyz
try:
    db = cx_Oracle.connect('username', 'password', server_IP)
    print db

except cx_Oracle.DatabaseError as e:
        error, = e.args
        if error.code == 1017:
            print('Please check your credentials.')
        else:
            print('Database connection error: %s'.format(e))
        raise
  

cx_Oracle.InterfaceError:无法获取Oracle环境句柄

我的问题是我需要在linux中安装任何oracle客户端或如何在linux中配置它以便我不会收到此错误。请帮忙 linux中使用cx_Oracle模块

需要哪些前提条件

2 个答案:

答案 0 :(得分:1)

请检查您对cx_Oracle.connect的来电语法。它需要用户名,密码和DSN或一个包含所有内容的参数。

例如

con = cx_Oracle.connect('username/password@ipaddress/xyz')

或构建完整的DSN:

ip = 'ipaddress'
port = 1221
SID = 'xyz'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)
db = cx_Oracle.connect('username', 'password', dsn_tns)

Using Python With Oracle

答案 1 :(得分:0)

回答第一个问题:是的,您需要在计算机上安装Oracle客户端才能使用cx_Oracle。您可以安装完整的客户端,但使用即时客户端要容易得多。如果您使用的是基于RPM的Linux发行版,则可以使用RPM来简化操作。到这里寻找即时客户:

http://www.oracle.com/technetwork/database/features/instant-client/index.html

但是,您收到的错误表明存在配置问题。确保您使用的Oracle客户端和您使用的cx_Oracle版本彼此兼容。换句话说,如果Python是64位,那么您的Oracle客户端也应该是64位。如果Python是32位,则Oracle客户端应为32位。检查环境变量ORACLE_HOME(如果使用完整的Oracle客户端),PATH和LD_LIBRARY_PATH。这是使用即时客户端RPM的优势之一 - 在编译时不需要环境变量,在运行时也不需要!

最后一条评论:看起来您正在使用EZ Connect语法连接到数据库。侦听器的默认端口是1521,而不是1221.如果您使用默认端口,则可以简单地省略该部分(换句话说,如Martin所述的ipaddress / xyz)。