我正在尝试连接到我的工作的远程数据库,但是当我运行python脚本时,它显示此错误。
我已经完成了this guide says I should have as requirements的所有操作,但错误不断出现。我尝试通过sql *连接,它可以正常工作。我下载了oracle客户端库12.2(32位版本,因为它需要与python具有相同的体系结构),我正在使用Oracle Database 11g 11.2.0.3,Python 3.7,并且我已经安装了Visual Studio Redistributable 2013。
这是我用来连接数据库的python脚本。显然,IP和端口与真实的IP和端口以及凭据不同。
import cx_Oracle
host='196.0.0.0'
port='8080'
service_name='SID'
pwd= 'PASS'
dsn_tns = cx_Oracle.makedsn(host,port,service_name)
connection = cx_Oracle.connect('user',pwd,dsn_tns)
每当我运行它时,即使oracle客户端库文件夹已经在计算机的PATH上,也会出现错误。我是否必须从服务器端配置某些内容?感谢您的帮助!
答案 0 :(得分:2)
实际上,这是一个版本问题。当我使用版本19时,我发现了相同的问题。当我将版本更改为12.2时,我已经解决了该问题。
答案 1 :(得分:1)
我遇到了完全相同的问题,因此我参考了此处链接的文档。我正在使用PyCharm作为IDE,并使用pycharm使用的python.exe,我发现它是32位(只需单击python.exe,屏幕上会打开命令提示符,第一行告诉它是32位还是64位)。
然后使用下面的链接下载了Oracle Instant Client。
我选择了32位和12.2版本(在撰写本文时,最新版本为v18.x)。此32位必须匹配您的python版本(在我的情况下也是32位)。
然后我提取了即时客户端的zip文件,将其放在C:\ oracle文件夹中(与放置位置无关),我的目录结构是..
C:\ oracle \ instantclient_12_2
现在,我将此位置作为Windows计算机的“ Path”系统环境变量中的第一个位置。
完成所有这些操作后,我重新启动了计算机(不需要)并使用pycharm并按如下方式进行连接...
import cx_Oracle as cxo
conn = cxo.connect("user_id", "password", "host_name:port_no/sid")
print(conn.version)
cur = conn.cursor()
cur.execute('SELECT \'X\' FROM DUAL')
for result in cur:
print(result[0])
cur.close()
conn.close()
答案 2 :(得分:1)
您需要安装相同版本的Python和数据库客户端。 例如:64位python和64位客户端,或者32位都可以。 我对Oracle XE 18c和python-3.8.3-amd64.exe感到厌倦
答案 3 :(得分:0)
该错误消息在cx_Oracle 7.1中得到了改进-但是问题是已检测到Oracle Client库的旧版本(版本11.2以上)。您需要确保已检测到已安装的较新版本。为此,请确保您的PATH
环境变量首先包含12.2客户端库。过去,Oracle Client库的旧版本通常安装在C:\windows\system32
中。
答案 4 :(得分:0)
该问题可能与this issue有关。
简而言之:
Windows 7不支持Oracle Instant Client版本19.3.0.0.0。
在Operating System Checklist for Oracle Database Client Installation中也有提及。
答案 5 :(得分:0)
在Windows 10上使用PyCharm和Selenium遇到同样的问题DPI-1050: Oracle Client library is at version 0.0 but version 11.2 or higher is needed
我发现我的电脑上安装的应用程序包含oic.dll
文件。我知道该应用程序是非常古老的技术,并且首先对此进行了尝试。将该文件重命名为其他文件,问题已解决。与数据库的连接成功
在我看来,唯一的问题是下次启动该应用程序时需要该文件,因此我需要将文件名更改回oic.dll
。