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

Python 如何将IBM_DB与旧版本的DB2一起使用?,python,odbc,db2,database-connection,Python,Odbc,Db2,Database Connection,我想使用IBMDB2ODBC驱动程序将Python连接到DB2Version9.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.

我想使用IBMDB2ODBC驱动程序将Python连接到DB2Version9.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")
我的问题是,我的ibmdb2版本是9.1,没有FixPack,当我尝试连接到ibmdb29.1版本时,会收到一条错误消息

"[IBM][CLI Driver] CLI0133E Option type out of range. SQLSTATE=HY092 SQLCODE=-99999"
第页中对此错误的解释如下: 如果出现此错误,通常意味着您使用的DB2版本太旧。请安装最新的FixPack或最新版本的DB2(当前为9.5)以解决此问题

但我不能安装最新的FixPack或最新版本的DB2,也不能以任何方式修改现有的DB2安装

问题


是否有任何方法可以连接到DB2Version9.1而无需修改数据库(可能使用IBM_DB以外的其他工具?

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

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

你使用的是什么版本的ibm_db?我能够使用ibm_db 1.0.4毫无问题地连接到DB29.1

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

conn=ibm\u db.connect('PDB2','username','password')


如果您使用的是无DSN连接(即数据库尚未在本地计算机上编目),则只需使用较长的形式(在其中指定数据库/端口/主机/UID/PWD)。

您使用的是哪一版本的ibm\u db?我能够使用ibm_db 1.0.4毫无问题地连接到DB29.1

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

conn=ibm\u db.connect('PDB2','username','password')


唯一需要使用较长形式(指定DATABASE/PORT/HOST/UID/PWD)的时间是,如果您使用的是无DSN连接(即数据库未在本地计算机上编目)。

我猜您的DB2客户端API版本高于DB2服务器本身,请确保在客户端计算机上使用相同的版本,尝试使用DB2 control center远程连接和维护数据库,并尝试从python连接到:

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

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

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

conn = ibm_db.connect("MDBASIS", "username", "password")
顺便说一句,这将迫使包装器使用本机库而不是odbc。

ibm_db(它们只是允许您通过python访问DB2 API调用的python模块。DB2查询本身是由您的DB2安装执行的……这与ibm_db和PyDB2非常不同

听起来问题出在DB2安装上,而不是ibm_db。您可以通过从命令行运行DB2并查看是否可以直接在DB2命令行界面中执行查询来测试这一点。

ibm_db(它们只是python模块,允许您通过python访问DB2 API调用。DB2查询本身由您的DB2安装执行……这与ibm_db和PyDB2非常不同

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