Как использовать IBM_DB с более старыми версиями DB2? - PullRequest
2 голосов
/ 01 июня 2011

Я хочу подключить Python к DB2 версии 9.1 с помощью драйвера IBM DB2 ODBC.

Ниже приведен мой код для подключения 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 голосов
/ 16 августа 2011

ibm_db (и PyDB2 - это просто модули python, которые позволяют вам обращаться к вызовам API DB2 через python. Сами запросы DB2 выполняются вашей установкой DB2 ... что-то очень отдельное от ibm_db и PyDB2.

Похоже, что проблема заключается в установке DB2, а не в ibm_db. Это можно проверить, запустив db2 из командной строки и посмотрев, можно ли выполнить запрос непосредственно в интерфейсе командной строки db2.

0 голосов
/ 08 июня 2011

Какую версию ibm_db вы используете?Я могу без проблем подключиться к DB2 9.1 с помощью ibm_db 1.0.4.

Также: Исходя из того, что вы указываете DSN в строке подключения, я предполагаю, что у вас уже есть база данных, каталогизированная наклиент как PDB2.Вы можете очень просто использовать оператор connect для:

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

Единственный раз, когда вам нужно использовать более длинную форму (где вы указываете DATABASE / PORT / HOST / UID / PWD), это есливы используете соединение без DSN (то есть база данных не была каталогизирована на локальном компьютере).

0 голосов
/ 10 июня 2011

Я полагаю, что ваша версия API клиента DB2 выше, чем сам сервер DB2, убедитесь, что вы используете ту же версию на клиентском компьютере, попытаетесь подключиться и поддерживать свою базу данных удаленно, используя центр управления DB2, и попытаться подключиться из python с помощью:

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

AFAIK, это заставит оболочку использовать собственную библиотеку вместо odbc.

0 голосов
/ 08 июня 2011

Я думаю, что проблема в драйвере клиента ibm_db.В основном вы можете подключиться к любой более старой версии со всех языков.Попробуйте получить другой драйвер db2.На вашем месте я бы установил клиент db2, который поставляется с несколькими драйверами, расположенными в sqllib.

...