Я пытаюсь подключиться к экземпляру 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
из свежезагруженного архива (все та же версия).