2015-09-03 13 views
5

Sto provando a connettermi al server SQL di Azure utilizzando il pymssql di Python. Il problema è che il seguente script funziona, ma solo a volte, le altre volte ottengo questo errore:pymssql: la connessione al database funziona solo a volte

_mssql.MSSQLDatabaseException: (20002, b'DB-Lib error message 20002, severity 9:\nAdaptive Server connection failed\n')

Questo è lo script che sto usando:

import pymssql 
conn = pymssql.connect(server='x', user='x', password='x', database='x') 
cursor = conn.cursor() 
cursor.execute('SELECT * FROM customers'); 
row = cursor.fetchone() 
while row: 
    print (str(row[0]) + " " + str(row[1]) + " " + str(row[2])) 
    row = cursor.fetchone() 

Mi sarebbe di grande aiuto se qualcuno mi può dire perché questo script sopra funziona solo a volte e il resto delle volte ottengo l'errore "Connessione server adattiva non riuscita".

risposta

5

Ho rivisto questi thread SO vecchi Read from the server failed when trying to connect to sql-azure from tsql e What is TDS Protocol Version 8.0 and why should I use it?. Il problema sembra essere causato dall'uso della versione errata di FreeTDS.

Ho trovato la chiave nella pagina del sito Web ufficiale di FreeTDS http://www.freetds.org/faq.html#Does.FreeTDS.support.Microsoft.servers.

Esiste una tabella di versioni del protocollo TDS per prodotto http://www.freetds.org/userguide/choosingtdsprotocol.htm.

enter image description here

FreeTDS saranno alias questa versione al 7,1 per ragioni di compatibilità all'indietro, ma questo dovrebbe essere evitato a causa di futuri problemi di compatibilità. Vedi la nota sotto sulle versioni obsolete.

Se si utilizza pymssql con FreeTDS su linux, penso che sia necessario controllare il file di configurazione "freetds.conf" nel percorso/etc/freetds /.

Questa è la mia configurazione per Azure SQL Server di seguito:

# A typical Microsoft server 
[egServer70] 
     host = <database_name>.database.windows.net 
     port = 1433 
     tds version = 7.3 

Si può cercare di verificare la connessione al server SQL Azure utilizzando lo strumento FreeTDS 'tsql' al comando 'tsql -H <database_name>.database.windows.net -U Username -D DatabaseName -p 1433 -P Password'.

I migliori saluti.

+0

Grazie per questa risposta, roba davvero utile. Un'altra cosa che mi ha aiutato è stata l'utilizzo di un pool di connessioni: http://docs.sqlalchemy.org/en/latest/core/pooling.html – dmn

+0

Qualche idea del perché questo non funziona "solo qualche volta"? Ho anche sperimentato questo utilizzando un adattatore basato su FreeTDS in PHP, dove forse un tentativo di connessione di 1/50 fallisce con questo errore. Questo sembra strano, mi sarei aspettato che funzionasse o non funzionasse, piuttosto che questo bizzarro fallimento occasionale. Sembra che questa soluzione abbia risolto il problema, quindi grazie mille per le informazioni :-) – DaveRandom

Problemi correlati