我想使用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以外的其他东西?
答案 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命令行界面中执行查询来对此进行测试。