2015-09-03 10 views
5

Ich versuche, mit Python Pymssql eine Verbindung zu Azure SQL Server herzustellen. Das Problem ist, dass das folgende Skript funktioniert aber nur manchmal, die anderen Male habe ich diesen Fehler:pymssql: Verbindung zur Datenbank funktioniert nur manchmal

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

Dies ist das Skript Ich verwende:

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

Es würde mir sehr helfen, wenn jemand kann mir sagen, warum dieses obige Skript nur manchmal funktioniert und den Rest der Zeit bekomme ich die "Adaptive Server Verbindung fehlgeschlagen" Fehler.

Antwort

5

Ich überprüfte diese alten SO-Threads Read from the server failed when trying to connect to sql-azure from tsql und What is TDS Protocol Version 8.0 and why should I use it?. Das Problem scheint durch die Verwendung der falschen Version von FreeTDS verursacht zu werden.

Ich fand den Schlüssel auf der Seite der FreeTDS offiziellen Website http://www.freetds.org/faq.html#Does.FreeTDS.support.Microsoft.servers.

Es gibt eine Tabelle der Versionen des TDS-Protokolls nach Produkt http://www.freetds.org/userguide/choosingtdsprotocol.htm.

enter image description here

FreeTDS wird diese Version für die Abwärtskompatibilität Gründen 7.1 alias, aber dies sollte aufgrund zukünftiger Kompatibilitätsprobleme vermieden werden. Beachten Sie den Hinweis zu veralteten Versionen.

Wenn Sie pymssql mit FreeTDS unter Linux verwenden, denke ich, dass Sie die Konfigurationsdatei "freetds.conf" im Pfad/etc/freetds/überprüfen müssen.

Dies ist meine Konfiguration für Azure SQL Server unter:

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

Sie können versuchen, die Verbindung zu Azure SQL Server zu testen, indem freetds Tool 'Tsql' auf Befehl 'tsql -H <database_name>.database.windows.net -U Username -D DatabaseName -p 1433 -P Password' verwenden.

Mit freundlichen Grüßen.

+0

Danke für diese Antwort, wirklich hilfreiche Sachen. Eine andere Sache, die mir geholfen hat, war die Verwendung eines Verbindungspools: http://docs.sqlalchemy.org/en/latest/core/pooling.html – dmn

+0

Eine Idee, warum das "nur manchmal" scheitert? Ich habe das auch mit einem FreeTDS-basierten Adapter in PHP erlebt, bei dem vielleicht 1/50 Verbindungsversuche mit diesem Fehler fehlschlagen. Das scheint merkwürdig, ich hätte erwartet, dass es entweder funktioniert oder nicht funktioniert, anstatt dieses bizarre gelegentliche Versagens. Diese Lösung scheint das Problem jedoch behoben zu haben, also vielen Dank für die Info :-) – DaveRandom

Verwandte Themen