pyodbc не может подключиться к базе данных, но IBM Data Studio подключается с теми же учетными данными - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь подключиться к базе данных на машине IBM, и я могу просто отлично подключиться через настольный клиент IBM "IBM Data Studio".Однако, когда я пытаюсь соединиться с pyodbc, он не может соединиться.Я получил серию ошибок, но, кажется, основной ответ выглядит следующим образом:

pyodbc.OperationalError: ('08001', u'[08001] [Microsoft][ODBC SQL Server Driver]
[TCP/IP Sockets]SQL Server does not exist or access denied. (17) 
(SQLDriverConnect); [08001] [Microsoft][ODBC SQL Server Driver][TCP/IP Sockets]ConnectionOpen (
Connect()). (10061); [08001] [Microsoft][ODBC SQL Server Driver]Invalid connection string attribute (0)')

Мой код выглядит следующим образом:

import pyodbc

# Specifying the ODBC driver, server name, database, etc. directly
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=*****; PORT=50000;DATABASE=****;UID=***;PWD=***')

# Create a cursor from the connection
cursor = cnxn.cursor()

cnxn.close()

Я работаю на компьютере с Windows.

Ответы [ 3 ]

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

То, что работает соединение jdbc от Data-Studio, не означает, что ваш pyodbc подключится к Db2.pyodbc не использует jdbc, вместо этого он будет использовать интерфейс CLI / ODBC для Db2, который реализуется подходящим драйвером.

Чтобы использовать Db2 из pyodbc в Windows, сначала убедитесь, что у вас установлен Db2-клиент в Windows, или установлен Db2-сервер в Windows.

ТамЕсть много видов Db2-клиентов.Многое зависит от операционной системы, на которой работает ваш Db2-сервер (Z / OS, i-Series, Linux, Unix, Windows), и от того, какие действия вы хотите выполнять на клиенте (разработка, администрирование / мониторинг, запросы,или все три).

Для некоторых целевых платформ есть драйверы не IBM, но я не буду их обсуждать.

В python вы можете выбрать соединение с базой данных либо сDSN (имя источника данных) (обычно это включает в себя более короткую строку подключения) или без DSN (более длинную строку подключения, содержащую все детали).

При обучении может быть проще заставить Microsoft Windows выполнять большую частьНачальная работа с odbcad32.Это проще всего сделать, если Db2-клиент уже настроен на доступ к одной или нескольким Db2-базам данных.Предварительным условием является то, что драйвер поддерживает CLI / ODBC.

Чтобы определить DSN (системный DSN или пользовательский DSN), используйте инструмент Microsoft odbcad32, чтобы указать вашу базу данных Db2 и проверить подключение.

Если Db2-сервер работает в Z / OS или i-Series, могут применяться специальные лицензионные требования в зависимости от того, подключаетесь ли вы напрямую к целевому Db2-серверу или используете ли вы шлюз Db2-connect.

Запишите точную строку DRIVER внутри odbcad32 для базы данных Db2, включая регистр и пробелы, потому что это потребуется в вашем коде Python.

Например, имя этого драйвера может выглядеть как 'IBM DB2ODBC DRIVER - DB2COPY1 ', если в Windows установлен локальный Db2-сервер (например, бесплатный Db2-Express-C).

Убедитесь, что соединение с базой данных Db2 установлено успешно внутри odbcad32.Это очень важно.

Когда odbcad32 удастся соединиться, то pyodbc удастся соединиться обычно.

В вашем коде python ваша строка соединения может использовать DSN или явно указывать DRIVER / SERVER/ PORT / DATABASE / UID / PWD, а также любые другие необходимые параметры в строке подключения.

Помните также, что вам не нужно использовать pyodbc.Есть и другие варианты взаимодействия Python с Db2-серверами.Сделайте осознанный выбор и сделайте свое исследование.

Вы также можете использовать предоставленный IBM модуль "ibm_db" или модуль интерфейса DBI "ibm_db_api", или, если вы используете объектно-реляционный картограф, вы можете использовать адаптер SQLAlchemy.(ibm_db_sa), или вы можете использовать django framework.

Прочитайте все об этом в документации по Db2 здесь.https://www.ibm.com/support/knowledgecenter/en/SSEPGG_10.5.0/com.ibm.swg.im.dbclient.python.doc/doc/c0054366.html

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

Я решил проблему!Проблема заключалась в том, что мне не хватало «драйвера ODBC iSeries Access».Я не думаю, что он доступен онлайн, хотя я могу ошибаться, мне нужно было, чтобы наш помощник по базе данных помог установить его.Теперь я могу подключиться через библиотеки ibm_db и pyodbc, настроив DSN в «odbcad32.exe».Решение заняло некоторое время, но в основном из-за отсутствия информативной документации от IBM.Надеюсь, это поможет любому в той же ситуации.

0 голосов
/ 07 июня 2018

Нельзя использовать драйвер ODBC для Microsoft SQL Server для подключения к экземпляру IBM DB2 (или к любой СУБД, кроме Microsoft SQL Server).

Для этого вам нужен драйвер ODBC для IBM DB2подключение, например от моего работодателя .

Вы также можете использовать драйвер моста ODBC-к-JDBC в сочетании с драйвером JDBC для IBM DB2,например JTOpen (с открытым исходным кодом, от IBM).

...