2011-06-01 49 views
2

我想使用IBM DB2 ODBC Driver将Python连接到DB2版本9.1。如何在早期版本的DB2中使用IBM_DB?

以下是我将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,而不修订包,当我尝试连接到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版本太旧的安装最新的修订包或最新版本。的DB2(目前是9.5)来解决问题。“

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

问题

有没有什么办法可以连接到DB2 9.1版,而无需修改数据库,可能使用比IBM_DB别的东西吗?

回答

0

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

0

您使用的是什么版本的ibm_db?我可以通过ibm_db 1.0.4连接到DB2 9.1,而没有任何问题。

此外:基于您在连接字符串中指定DSN这一事实,我假设您已将数据库编录在客户端上作为PDB2。您可以大大只需将连接声明:

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

你需要使用更长的形式(其中指定数据库/ PORT/HOST/UID/PWD)的唯一情况是,如果你使用的是DSN-更少的连接(即数据库尚未在本地机器上编目)。

0

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

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

AFAIK,这将迫使包装使用本机库而不是odbc。

0

IBM_DB(和PyDB2只是Python模块,使您可以访问DB2 API调用,通过蟒蛇。该DB2查询自己正在DB2安装完成......一些东西IBM_DB和PyDB2非常独立。

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

相关问题