如何将IBM_DB与旧版本的DB2一起使用?

时间:2011-06-01 08:43:59

标签: python odbc db2 database-connection

我想使用IBM DB2 ODBC Driver将Python连接到DB2 9.1版。

以下是我将Python连接到DB2的代码。该程序适用于IBM DB2的更高版本。

import ibm_db

conn = ibm_db.connect("DSN=PDB2;DRIVER={IBM DB2 ODBC DRIVER};DATABASE=MDBASIS;PORT=1234;PROTOCOL=TCPIP;UID=username;PWD=password","","")
stmt = ibm_db.exe_immediate(conn,"create table egg (ID SMALLINT, NAME VARCHAR(30))")
stmt = ibm_db.exe_immediate(conn,"insert into egg (ID, NAME) VALUES('1','ok')")
state = ibm_db.exe_immediate("select * from egg")
result = ibm_db.fetch_both(state)
while result != False:    
    print 'id = %d and name = %s' %(result[0],result[1])
    result = ibm_db.fetch_both(state)
stmt = ibm_db.exe_immediate(conn,"drop table egg")

我的问题是,我的IBM DB2版本是9.1而没有FixPack,当我尝试连接到IBM DB2 9.1版本时,我收到一条错误消息。

"[IBM][CLI Driver] CLI0133E Option type out of range. SQLSTATE=HY092 SQLCODE=-99999"

http://programmingzen.com/2008/02/08/essential-guide-to-the-ruby-driver-for-db2/is页中写的错误说明: “如果您收到此错误,通常意味着您使用的旧版本的DB2太旧。安装最新的FixPack或最新版本的DB2(目前为9.5)以解决问题。”

但我无法安装最新的FixPack或最新版本的DB2,或以任何方式修改现有的DB2安装。

问题

有没有什么方法可以在不修改数据库的情况下连接到DB2版本9.1,可能使用除IBM_DB以外的其他东西?

4 个答案:

答案 0 :(得分:0)

我认为问题出在客户端ibm_db驱动程序中。基本上,您可以连接到所有语言的任何旧版本。尝试获取另一个db2驱动程序。如果我是你,我会安装db2客户端,它带有几个驱动程序,位于sqllib。

答案 1 :(得分:0)

您使用的是哪个版本的ibm_db?我可以毫无问题地使用ibm_db 1.0.4连接到DB2 9.1。

另外:基于您在连接字符串中指定DSN的事实,我假设您已将客户端上的数据库编目为PDB2。你可以非常简单地将你的连接语句简化为:

conn = ibm_db.connect('PDB2','username','password')

您需要使用较长的表单(指定DATABASE / PORT / HOST / UID / PWD)的唯一情况是您使用的是无DSN连接(即数据库尚未在本地计算机上编目)

答案 2 :(得分:0)

我猜你的DB2客户端API版本高于DB2服务器本身,确保你在客户端机器上使用相同的版本,尝试使用DB2控制中心远程连接和维护你的数据库,并尝试从python与:

conn = ibm_db.connect("MDBASIS", "username", "password")

AFAIK,这会强制包装器使用本机库而不是odbc。

答案 3 :(得分:0)

ibm_db(和PyDB2只是python模块,允许您通过python访问DB2 API调用.DB2查询本身由DB2安装执行......与ibm_db和PyDB2非常分开。< / p>

听起来你的DB2安装是问题,而不是ibm_db。您可以通过从命令行运行db2并查看是否可以直接在db2命令行界面中执行查询来对此进行测试。