#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')
Если это не сработает, есть две основные возможности:
- Вы используете старый драйвер ODBC. Это произойдет, если вы используете старый доступ iSeries (в этом случае имя драйвера
iSeries Access ODBC Driver
) или даже более старый клиентский доступ (имя драйвераClient Access ODBC Driver (32-bit)
). Если вы выберете подходящее имя для своего драйвера, оно будет работать. - Вы используете драйвер 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/…