连接DB2时出现pyodbc.Error 'IM002

1 投票
3 回答
5292 浏览
提问于 2025-04-16 08:35

我下载了Python 2.7(python-2.7.1.amd64.msi)和pyodbc,这是一个用于连接DB2数据库的Python扩展模块(也就是pyodbc-2.1.8.win-amd64-py2.7.exe)。

我写了一个示例脚本,如下所示。

import csv 
import pyodbc 
conn = pyodbc.connectpyodbc.connect('DRIVER={DB2};SERVER=localhost;DATABASE=DBT1;UID=scott;PWD=tiger;')  
curs = conn.cursor() 
curs.execute('select count(edokimp_id) from edokimp') 
print curs.fetchall() 

这个脚本出现了以下错误

pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnectW)')

因为我对Python还很陌生,从错误信息中我意识到我需要下载IBM DB2的驱动程序来配合pyodbc使用,所以我在谷歌上搜索了很久,但没找到。

如果你能告诉我在哪里可以下载这个驱动程序,并且之后教我怎么配置和加载这个驱动程序,我会非常感激。

在Java中,

  • 驱动程序会以ojdbc.jar的形式提供,这个文件会被复制到lib目录下,并且会在类路径中
  • 需要修改配置文件
  • 在Java类中引用数据源

因为我对Python还很陌生,所以如果你能告诉我相应的步骤,并给我一个Python的示例,我会非常感激。

3 个回答

0

这个pyodbc的连接字符串对我来说是有效的:

conexion_str = 'SYSTEM=%s;db2:DSN=%s;UID=%s;PWD=%s;DRIVER=%s;' % (self._SYSTEM, self._DSN, self._UID, self._PWD, self._DRIVER)
self._cnn = pyodbc.connect(conexion_str)
0

确实可以使用 pyodbc。我觉得你可能连接字符串写错了。经过一些研究和测试,我用以下代码解决了这个问题:

con = pyodbc.connect('DRIVER=iSeries Access ODBC Driver;SYSTEM=10.0.0.1;UID=bubi;PWD=xyz;DBQ=DEFAULTSCHEMA;EXTCOLINFO=1')
cur = con.cursor()
cur.execute('select * from MYTABLE')
row = cur.fetchone()
if row:
    field1 = row[0] 
    field2 = row[1]
# etc...

正如你所看到的,它不需要在你的系统上配置 DSN

1

你可以在这个项目的主页上找到 PyDB2驱动程序

如果你在使用官方的Python时遇到编译问题,可以试试 ActivePython,这是Windows上一个不错的Python版本。

补充说明:如果系统提示你需要DB2的头文件,你需要下载 IBM数据服务器客户端,用于ODBC和CLI

撰写回答