使用cx_Oracle在Python中连接Oracle时出现错误。

4
我试图使用Python连接Oracle数据库,如下所示。
import cx_Oracle
conn = cx_Oracle.connect('user/password@host:port/database')

我连接Oracle时遇到了错误。 DatabaseError: DPI-1047: 无法加载64位的Oracle客户端库:"libclntsh.so:无法打开共享对象文件:没有那个文件或目录"。请参阅 https://oracle.github.io/odpi/doc/installation.html#linux 获取帮助。
我一直在努力解决这个问题。例如,我使用了我的用户名、密码、主机、端口和数据库('orcl')。 'admin/admin@10.10.10.10:1010/orcl' 为什么不能连接?顺便说一句,我正在Azure笔记本上运行所有代码。

您的Oracle客户端版本与Python安装版本不匹配,请确保它们是相同的版本,例如x86或x64。 - Pavan Kumar T S
按照链接 https://oracle.github.io/odpi/doc/installation.html#linux 上的说明操作,然后重启电脑,这对我有用。 - TheBeginner
截至2022年,最快的解决方案是使用最新的cx_Oracle版本,现在称为python-oracledb。这不需要Oracle客户端库,因此您不会在默认模式下看到DPI-1047。请参阅发布公告 - Christopher Jones
4个回答

1
该错误表示您缺少64位Oracle客户端安装或尚未正确配置。查看错误消息中提到的链接,它将提供有关如何执行Oracle客户端安装和配置的说明。
[代表Anthony更新:他最新的cx_Oracle版本不需要Oracle Client库,因此如果您升级,就不会看到DPI-1047错误。驱动程序已重命名为python-oracledb,但API仍支持Python DB API 2.0规范。请参见homepage。]

我按照错误信息中链接的所有说明解决了问题。我已经取得了进展,但是又遇到了另一个错误,哈哈。不管怎样,谢谢你,但我仍然不知道如何在Azure笔记本中安装cx_Oracle或其他软件包。实际上,在我的本地环境中,我已经成功安装了它... - sunsets
你现在遇到了什么错误?能否更新一下你的问题? - Anthony Tuininga

0

当您的Oracle客户端未安装或LD_LIBRARY_PATH未设置在libclntsh.so所在的位置时,会出现此错误。

如果您已安装Oracle客户端,则搜索libclntsh.so并将LD_LIBRARY_PATH设置为

"export LD_LIBRARY_PATH=/app/bds/parcels/ORACLE_INSTANT_CLIENT/instantclient_11_2:$LD_LIBRARY_PATH"


请查看以下链接以获取有关Oracle客户端安装的更多详细信息:https://oracle.github.io/odpi/doc/installation.html#linux - Rohit

0

这似乎是6.X版本的问题。在5.X中没有出现过这个问题。但对于我的情况,一个小小的解决方法起了作用。我在我的物理机器上安装了它,唯一需要做的就是重新启动电脑或重新打开终端,因为我已经将其添加到环境变量的路径中。你可以尝试在物理机器上安装,而不是使用Azure笔记本。


这实际上是一个安装/配置问题。在cx_Oracle 5.x中,您会收到不同的错误消息。 - Anthony Tuininga

-1
这是使用Python连接Oracle的完整程序。 首先,您需要安装cx_Oracle。要安装它,请执行以下命令。

pip install cx_Oracle

import cx_Oracle

def get_databse_coonection():
    try:
        host='hostName'
        port ='portnumber'
        serviceName='sid of you database'
        user = 'userName'
        password = 'password'
        dns = cx_Oracle.makedsn(host,port,service_name=serviceName)
        con = cx_Oracle.connect(user, password, dns)
        cursor = con.cursor()   
        query ="select * from table"
        cursor.execute(query)
        for c in cursor:
            print(c)
    except cx_Oracle.DatabaseError as e: 
        print("There is a problem with Oracle", e) 
    finally:
        if cursor:
            cursor.close()
        if con:
            con.close()

get_databse_coonection()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接