Подключение к экземпляру SQL Server с помощью pymssql на Windows

Я пытаюсь подключиться к экземпляру SQL Server с компьютера Windows с помощью pymssql (версия 2.0.0b1-dev-20111019 с Python 2.7.1). Я попробовал самый простой подход из консоли:

import pymssql
c = pymssql.connect(host = r'servername\instance',
                    user = 'username',
                    password = 'userpassword')

В ответ на это я получаю очень полезную ошибку: InterfaceError: Подключение к базе данных не удалось по неизвестной причине.

Я достаточно уверен, что информация о подключении верна, поскольку она работает, когда я использую adodbapi, со следующими командами:

import adodbapi
c = adodbapi.connect(r'Provider=sqloledb;Data Source=servername\instance;User ID=username;password=userpassword;'
c.close

Я попробовал добавить номер порта к параметру host, с тем же результатом. Есть ли у кого-нибудь предложение, как решить эту проблему?


Кстати, я прочитал ответы на "Unable to connect to SQL Server via pymssql". В итоге ОП решил свою проблему, правильно настроив FreeTDS, который, насколько я могу судить, не используется pymssql в Windows.


По рекомендации @cha0site я попробовал использовать только имя хоста, а не имя хоста и экземпляр. Это привело к той же ошибке, но, похоже, на ее генерацию ушло больше времени (хотя трассировка все еще указывает на ту же строку). Причина, по которой я указывал экземпляр, заключается в том, что я не мог подключиться с помощью SSMS, если не указывал экземпляр, поэтому я предположил, что это будет необходимо для других подключений.


Теперь я также попробовал pymssql.connect(host='servername', user='username', password='userpassword', database='instance') с тем же результатом (на основе комментария @Sid). Основываясь на документации по pymssql, я полагаю, что параметр database используется для указания исходной базы данных, к которой будет подключен пользователь, а не экземпляра.

Чтобы уточнить, "экземпляр" - это имя, предоставляемое при установке SQL Server, а не база данных в этой установке. Мне пришло в голову, что, возможно, pymssql не поддерживает эту нотацию, поэтому я попробую переконфигурировать экземпляр SQL Server так, чтобы это не требовалось.


Теперь я переустановил SQL Server как экземпляр по умолчанию, а не как именованный экземпляр, что позволяет мне подключаться без указания имени экземпляра. adodbapi по-прежнему работает (без /instance), но pymssql по-прежнему выдает ту же ошибку. Я также удалил и снова установил pymssql из свежезагруженного архива (все та же версия).

8
задан Community 23 May 2017 в 11:48
поделиться