Проблема при подключении к Db2 для IBM i с помощью pyodbc

#python #db2 #pyodbc #ibm-midrange

Вопрос:

я пытаюсь установить соединение с as400 с db2 с помощью pyodbc и драйвера ibm db2 odbc.

 import pyodbc

connection = pyodbc.connect(
    driver='{IBM DB2 ODBC DRIVER}',
    system='192.168.1.100',
    uid='user',
    pwd='pass')
c1 = connection.cursor()

#this is meaningless sql, i just want the connection
c1.execute('select * from libname.filename')
for row in c1:
    print (row)
 

Запуск этого дает мне эту ошибку

 python pydata.py

Traceback (most recent call last):
  File "C:UserstcaDesktopScriptingSTuffpydata.py", line 3, in <module>
    connection = pyodbc.connect(
pyodbc.OperationalError: ('08001', '[08001] [IBM][CLI Driver] SQL1013N  The database alias name or database name "" could not be found.  SQLSTATE=42705rn (-1013) (SQLDriverConnect)')
 

Есть какие-нибудь идеи?

Все это находится под управлением win10

ПРАВКА: Добавление этой «базы данных=’s10c38ft'»,

 import pyodbc

connection = pyodbc.connect(
    driver='{IBM DB2 ODBC DRIVER}',
    system='192.168.1.100,8471',
    database='s10c38ft',
    uid='user',
    pwd='pass')
c1 = connection.cursor()

c1.execute('select * from libname.filename')
for row in c1:
    print (row)
 

Заставляет его зависать на мигающем курсоре, я даже не могу нажать CTRL C, чтобы завершить его, мне нужно закрыть cmd.

Комментарии:

1. Проверьте документацию для драйвера ODBC. Указание номера порта путем добавления запятой к имени/IP сервера (например, 192.168.1.100,8471 )-это то, что я когда-либо видел только для драйверов ODBC Microsoft для SQL Server. Большинство других драйверов ODBC используют отдельные SERVER= PORT= аргументы и.

Ответ №1:

Правильное имя драйвера должно быть IBM i Access ODBC Driver (но см. Примечания ниже). Кроме этого, ваш первый пример был правильным:

 connection = pyodbc.connect(
    driver='{IBM i Access ODBC Driver}',
    system='192.168.1.100',
    uid='user',
    pwd='pass')
 

Если это не сработает, есть две основные возможности:

  1. Вы используете старый драйвер ODBC. Это произойдет, если вы используете старый доступ iSeries (в этом случае имя драйвера iSeries Access ODBC Driver ) или даже более старый клиентский доступ (имя драйвера Client Access ODBC Driver (32-bit) ). Если вы выберете подходящее имя для своего драйвера, оно будет работать.
  2. Вы используете драйвер ODBC, который не предназначен для IBM i. Наиболее часто используемым членом семейства Db2 является Db2 для LUW (Linux, Unix, Windows), но есть и другие. Ничто из этого не сработает для вас.

Вы можете узнать список точных имен драйверов ODBC, которые вы установили, позвонив по телефону pyodbc.drivers() . Если у вас нет ни одного из тех, кого я назвал выше по имени, то у вас нет подходящего водителя. Драйвер ODBC, который вам нужен, описан здесь.

Комментарии:

1. Когда я пытаюсь это сделать, я получаю эту ошибку. «пиодбк. Ошибка интерфейса: (‘IM002’, ‘[IM002] [Microsoft][Диспетчер драйверов ODBC] Имя источника данных не найдено и драйвер по умолчанию не указан (0) (SQLDriverConnect)’)»

2. @Anthony — Проверьте список, возвращенный, pyodbc.drivers() чтобы узнать, какие драйверы ODBC доступны для вашего приложения Python.

3. >>>>>> печать(pyodbc.drivers()) [‘SQL Server’, ‘ДРАЙВЕР IBM DB2 ODBC — IBMDBCL1’, ‘ДРАЙВЕР IBM DB2 ODBC’, ‘ДРАЙВЕР IBM DB2 ODBC — C_PROGRA~1_IBM_CLIDRI~1’, ‘

4. Где ты взял этого водителя? Я никогда о нем не слышал. Может быть, у вас есть драйвер для Db2 для LUW?

5. Вот ссылка, по которой я ее получил <a rel=»noreferrer noopener nofollow» href=»https://www.ibm.com/support/pages/db2-odbc-cli-driver-download-and-installation-information#[

]Related Information[

]» rel=»nofollow noreferrer»> ibm.com/support/pages/…