Próbuję połączyć się z wystąpieniem programu SQL Server z okna systemu Windows za pomocą programu pymssql (wersja 2.0.0b1-dev-20111019 z Python 2.7.1). Próbowałem najbardziej podstawowe podejście z konsoli:Nawiązanie połączenia z wystąpieniem programu SQL Server przy użyciu pymssql w systemie Windows
import pymssql
c = pymssql.connect(host = r'servername\instance',
user = 'username',
password = 'userpassword')
W odpowiedzi na to, mam bardzo pomocny błąd: InterfaceError: Connection to the database failed for an unknown reason.
jestem dość pewien, że dane połączenie jest poprawne, jak to działa kiedy używać adodbapi, z następującymi poleceniami:
import adodbapi
c = adodbapi.connect(r'Provider=sqloledb;Data Source=servername\instance;User ID=username;password=userpassword;'
c.close
próbowałem dodanie numeru portu do parametru gospodarza, z tym samym rezultatem. Czy ktoś ma sugestię, jak rozwiązać ten problem?
Nawiasem mówiąc, czytałem odpowiedzi na "Unable to connect to SQL Server via pymssql". OP ostatecznie rozwiązał problem, poprawnie konfigurując FreeTDS, który, z tego, co wiem, nie jest używany przez pymssql w systemie Windows.
Na podstawie rekomendacji @ cha0site próbowałem używać tylko nazwy hosta, a nie nazwy hosta i instancji. Powodowało to ten sam błąd, ale wygenerowanie błędu trwało dłużej (chociaż traceback wciąż wskazuje tę samą linię). Powodem, dla którego podałem instancję jest to, że nie mogłem połączyć się przy użyciu SSMS, chyba że podałem instancję, więc założyłem, że będzie to konieczne dla innych połączeń.
ja teraz też starał pymssql.connect(host='servername', user='username', password='userpassword', database='instance')
z tego samego rezultatu (na podstawie @ komentarzu Sida). Opierając się na pymssql documentation, uważam, że parametr database
służy do określenia początkowej bazy danych, do której użytkownik ma się podłączyć, a nie do instancji.
W celu wyjaśnienia, "instancja" to nazwa podana podczas instalacji SQL Server, a nie jako baza danych w tej instalacji. Wydaje mi się, że jest możliwe, że pymssql nie obsługuje tej notacji, więc zajmie się ponowną konfiguracją instancji SQL Server, aby nie była wymagana.
Zainstalowałem ponownie program SQL Server jako domyślną instancję zamiast instancji nazwanej, która pozwala mi nawiązywać połączenia bez określania nazwy instancji. adodbapi
nadal działa (bez /instance
), ale pymssql
nadal zwraca ten sam błąd. Usunąłem też i ponownie zainstalowałem pymssql
ze świeżo pobranego archiwum (nadal tej samej wersji).
Myślę, że musisz przekazać nazwę hosta dla 'host', a nie źródła danych ADODB. – cha0site
@ cha0site: "Źródło danych ADODB" w tym przypadku jest nazwą hosta (plus wystąpienie). adodbapi umożliwia określenie nazwy hosta lub adresu IP w tej pozycji, a nie nazwanego źródła danych. – Allan
Tak.Mówię, że powinieneś upuścić instancję i podać jej nazwę hosta. – cha0site