Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python cx_Oracle.InterfaceError:无法在linux中获取Oracle环境句柄_Python_Oracle_Cx Oracle - Fatal编程技术网

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

Python cx_Oracle.InterfaceError:无法在linux中获取Oracle环境句柄,python,oracle,cx-oracle,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: p

我正在尝试使用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模块需要哪些先决条件请检查调用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)

回答第一个问题:是的,您的计算机上需要安装Oracle客户端才能使用cx\U Oracle。您可以安装完整的客户端,但使用即时客户端要容易得多。如果您使用的是基于RPM的Linux发行版,那么可以使用RPM,这将大大简化工作。转到此处获取即时客户端:

但是,您得到的错误表明存在配置问题。确保您使用的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)。

相同的代码在windows中工作正常,因为安装了oracle客户端。您的windows客户端可能通过解析其
TNSNAMES中的数据库名称来处理问题。尽管TNSNAMES只包含一个IP地址来引用数据库,这仍然让我感到惊讶。这不是常见的做法。我仍然会犯同样的错误。linux中是否缺少任何配置?我正在尝试远程访问计算机并执行数据库命令。