2015-09-03 29 views
5

我想使用Python的pymssql連接到Azure SQL服務器。問題是,下面的腳本工作,但只是偶爾,其他時間我得到這個錯誤:pymssql:連接到數據庫只能有效

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

這是我使用的腳本:

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

這會對我幫助很大,如果有人可以告訴我爲什麼上面的腳本僅在有時和其他時間出現「Adaptive Server連接失敗」錯誤。

回答

5

我檢查了這些SO舊線程Read from the server failed when trying to connect to sql-azure from tsqlWhat is TDS Protocol Version 8.0 and why should I use it?。 這個問題似乎是由於使用了錯誤版本的FreeTDS造成的。

我在FreeTDS官方網站http://www.freetds.org/faq.html#Does.FreeTDS.support.Microsoft.servers的頁面找到了鑰匙。

有產品http://www.freetds.org/userguide/choosingtdsprotocol.htm的TDS協議版本表。

enter image description here

freetds的別名將這個版本7.1向後兼容的原因,但是這應該是由於未來的兼容性問題是可以避免的。請參閱以下有關過時版本的註釋。

如果你在linux上使用pthssql和FreeTDS,我認爲你需要在路徑/ etc/freetds /中檢查配置文件「freetds.conf」。

這是我下面Azure的SQL Server配置:

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

你可以嘗試測試通過使用freetds的工具 'TSQL' 指揮 'tsql -H <database_name>.database.windows.net -U Username -D DatabaseName -p 1433 -P Password' 天青SQL服務器的連接。

最好的問候。

+0

感謝您的回答,真正有幫助的東西。幫助我的另一件事是使用連接池:http://docs.sqlalchemy.org/en/latest/core/pooling.html – dmn

+0

任何想法爲什麼這種失敗「只有時」?我也在PHP中使用基於FreeTDS的適配器,在這種情況下,可能會有1/50次連接嘗試失敗並出現此錯誤。這看起來很奇怪,我本來期望它可以工作或不工作,而不是偶然的這種奇怪的失敗。這個解決方案似乎確實解決了這個問題,所以非常感謝info :-) – DaveRandom