2012-02-06 19 views
8

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).

+0

Myślę, że musisz przekazać nazwę hosta dla 'host', a nie źródła danych ADODB. – cha0site

+0

@ 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

+0

Tak.Mówię, że powinieneś upuścić instancję i podać jej nazwę hosta. – cha0site

Odpowiedz

0

Sprawdź plik freetds.conf i sprawdzić, czy masz ustawiony port , a następnie sprawdzić ponownie connexion.

DB = pymssql.connect(host='DB',user='youruser',password='yourpwd',database='yourDBname') 

Edit: Przykład mój plik freetds.conf Python:

host = 'IP' 
port = 1219 
Powiązane problemy