cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle in linux

cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle in linux

我正在尝试使用 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: Unable to acquire Oracle environment handle

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

请检查您对 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

回答第一个问题:是的,您需要在计算机上安装 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 的优势之一——在编译时不需要环境变量,在 运行 时也不需要 none!

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