2012-02-06 4 views
8

Sto tentando di connettersi a un'istanza di SQL Server da una casella di Windows utilizzando pymssql (versione 2.0.0b1-dev-20111019 con Python 2.7.1). Ho provato l'approccio più semplice dalla console:Connessione all'istanza di SQL Server utilizzando pymssql su Windows

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

In risposta a questo, ottengo l'errore molto utile: InterfaceError: Connection to the database failed for an unknown reason.

Sono ragionevolmente fiducioso che le informazioni di connessione è corretta, come funziona quando uso adodbapi, con i seguenti comandi:

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

ho provato ad aggiungere il numero di porta per il parametro host, con lo stesso risultato. Qualcuno ha un suggerimento su come risolvere il problema?


Per inciso, ho letto le risposte a "Unable to connect to SQL Server via pymssql". L'OP alla fine ha risolto il problema configurando correttamente FreeTDS, che, da quello che posso dire, non viene utilizzato da pymssql su Windows.


basata sulla raccomandazione di @ cha0site, ho provato ad utilizzare solo il nome host, piuttosto che il nome host e l'istanza. Ciò ha provocato lo stesso errore, ma sembra che ci sia voluto più tempo per generare l'errore (sebbene il traceback indichi ancora la stessa riga). Il motivo per cui ho specificato l'istanza è che non ero in grado di connettermi usando SSMS a meno che non avessi specificato l'istanza, quindi ho pensato che sarebbe stato necessario per altre connessioni.


Ora ho provato anche pymssql.connect(host='servername', user='username', password='userpassword', database='instance') con lo stesso risultato (sulla base degli @ commento di Sid). In base allo pymssql documentation, credo che il parametro database sia utilizzato per specificare il database iniziale a cui deve essere connesso l'utente, anziché l'istanza.

Giusto per chiarire, "istanza" è il nome fornito durante l'installazione di SQL Server, non un database all'interno di tale installazione. Mi viene in mente che è possibile che pymssql non supporti questa notazione, quindi cercherò di riconfigurare l'istanza di SQL Server in modo che non sia necessaria.


Ora ho reinstallato SQL Server come istanza predefinita, invece di un'istanza denominata, che mi permette di collegare senza specificare il nome dell'istanza. adodbapi funziona ancora (senza /instance), ma pymssql restituisce ancora lo stesso errore. Ho anche rimosso e reinstallato da un archivio appena scaricato (sempre la stessa versione).

+0

Penso che sia necessario passare il nome host per 'host' e non l'origine dati ADODB. – cha0site

+0

@ cha0site: "Origine dati ADODB" in questo caso è il nome host (più istanza). adodbapi consente di specificare il nome host o l'indirizzo IP in quella posizione, piuttosto che un'origine dati nominata. – Allan

+0

Sì.Sto dicendo che dovresti rilasciare l'istanza e dargli solo il nome host. – cha0site

risposta

0

Controllare il file freetds.conf e vedere se è stata impostata la porta , quindi controllare nuovamente il collegamento:.

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

Edit: esempio del mio file freetds.conf Python:

host = 'IP' 
port = 1219