pyodbc не удается подключиться к базе данных, но IBM Data Studio подключается с теми же учетными данными

Я пытаюсь подключиться к базе данных на компьютере 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.


person Bennet Leff    schedule 07.06.2018    source источник
comment
Действительно ли машина работает под управлением Microsoft SQL Server?   -  person Gord Thompson    schedule 07.06.2018
comment
Также SQL-сервер работает на порту 1433 по умолчанию?   -  person Ian-Fogelman    schedule 07.06.2018
comment
Машина представляет собой сервер IBM, работающий под управлением DB2. Я полагаю, это означало бы, что на нем не работает сервер Microsoft SQL? Я бы предположил, что сервер работает на порту по умолчанию, поскольку администратор базы данных не был уверен. Как я могу проверить, на каком порту он работает?   -  person Bennet Leff    schedule 07.06.2018
comment
Я заметил этот ответ SO: stackoverflow.com /вопросы/6044326/   -  person Bill Bell    schedule 07.06.2018
comment
@BillBell Спасибо, однако я уже пробовал эту тему, но безрезультатно.   -  person Bennet Leff    schedule 07.06.2018
comment
(1) У меня нет и не используется это программное обеспечение IBM. Можете ли вы использовать ibm.com/support/knowledgecenter/en/SSH2TE_1.1.0/, чтобы узнать о соединении? (2) Что побудило вас использовать библиотеку Python pyodbc, а не библиотеку, рекомендованную в документе IBM?   -  person Bill Bell    schedule 07.06.2018
comment
На самом деле у меня были почти одинаковые ошибки с обоими пакетами. Я могу связаться со службой поддержки IBM, но их документация оказалась на дюйм в глубину и на милю в ширину.   -  person Bennet Leff    schedule 07.06.2018
comment
Пробовали ли вы использовать библиотеки, предоставленные IBM? pypi.org/project/ibm_db   -  person Stavr00    schedule 07.06.2018
comment
Да, я пробовал библиотеки IBM и получаю примерно те же ошибки. Все они кажутся проблемами с подключением, однако я могу без проблем подключиться с теми же учетными данными через клиент IBM Data Studio.   -  person Bennet Leff    schedule 07.06.2018


Ответы (3)


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

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

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

person TallTed    schedule 07.06.2018

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

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

Существует множество виды клиентов 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, либо явно указывать ДРАЙВЕР/СЕРВЕР/ПОРТ/БАЗА ДАННЫХ/UID/PWD вместе с любыми другими необходимыми настройками в строке подключения.

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

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

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

person mao    schedule 08.06.2018
comment
Я следовал этому, но когда я использую порт 8471, он зависает. Если я использую порт 50000, он выдает ошибку. Кажется, что 8471 является правильным портом, потому что это порт по умолчанию в соответствии с некоторыми документами IBM, но, очевидно, зависание программы (odbcad32) означает, что что-то не работает. - person Bennet Leff; 08.06.2018

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

person Bennet Leff    schedule 08.06.2018