无cx_oracle时Python连接Oracle数据库遇pyodbc报错求助
解决pyodbc连接Oracle时的IM002错误
1. 修正驱动名称匹配问题
你安装的驱动是Oracle in OraClient18Home1_32bit,但代码中DRIVER字段写的是Oracle in OraClient18Home1,名称不匹配会导致ODBC管理器找不到驱动。
- 打开对应位数的ODBC数据源管理器:
- 64位系统下,运行
C:\Windows\SysWOW64\odbcad32.exe打开32位ODBC管理器;32位系统直接在控制面板找「ODBC数据源」。 - 切换到「驱动程序」标签,复制Oracle驱动的准确名称(比如你安装的应该是
Oracle in OraClient18Home1_32bit)。
- 64位系统下,运行
- 修改连接字符串:
import pyodbc cnxn = pyodbc.connect('DRIVER={Oracle in OraClient18Home1_32bit};DBQ=sinarrtou01-sc.sg.xx.com:1700/SGART4U_app.sg.xx.com;UID=DASKUMA;PWD=######') cursor = cnxn.cursor()
2. 检查Python与驱动的位数兼容性
ODBC驱动和Python的位数必须一致,否则会出现驱动无法识别的问题:
- 在Jupyter中运行以下代码查看Python位数:
import sys print(sys.maxsize > 2**32) # 输出True为64位,False为32位 - 如果Python位数和驱动(32位)不匹配,要么安装对应位数的Oracle Client驱动,要么切换到对应位数的Python环境。
3. 验证DBQ参数格式或改用TNS名称
DBQ参数格式错误也可能引发连接失败,可尝试两种方式:
- 确认DBQ格式正确:格式应为
主机名:端口/服务名,你的现有格式是正确的,可直接保留。 - 改用TNS名称连接:
- 找到Oracle Client安装目录下的
tnsnames.ora(通常在OraClient18Home1_32bit\network\admin),添加如下配置:SGART4U = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = sinarrtou01-sc.sg.xx.com)(PORT = 1700)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = SGART4U_app.sg.xx.com) ) ) - 修改连接字符串:
cnxn = pyodbc.connect('DRIVER={Oracle in OraClient18Home1_32bit};DBQ=SGART4U;UID=DASKUMA;PWD=######')
- 找到Oracle Client安装目录下的
4. 测试驱动的可用性
通过ODBC数据源管理器创建测试数据源,验证驱动是否正常:
- 打开对应位数的ODBC管理器,切换到「用户DSN」或「系统DSN」,点击「添加」。
- 选择你的Oracle驱动,填入主机、端口、服务名、用户名和密码,测试连接。如果测试失败,说明驱动安装不完整,需重新安装Oracle Client并确保勾选ODBC组件。
内容的提问来源于stack exchange,提问作者dskmrjt
相关产品推荐
相关产品推荐

