DB-Lib error message 20002, severity 9
完整(zheng)報錯內(nei)容:20002, b'DB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (I0.185.43.12:1433)\n'
問題描述 :在python中,使用 psmssql 連接遠程數據庫,報上面的錯。通過別的機器連接遠端機沒問題,自己機器用別的工具(sqlcmd,naticat等)連接遠端機也沒問題,定位到問題出在本機使用pymssql 庫上
環(huan)境:win7sp1x64 + python3.5+pymssql2.1.3
解決方案:
官(guan)方鏈接:
它推(tui)薦使用tsql命令先測試一下freetds的(de)好壞(huai),反(fan)正pymssql也(ye)是通過freetds來連接數據庫的(de),先排(pai)查freetds的(de)問題(ti)。
1.下(xia)載(zai)windows系(xi)統下(xia)的(de)tsql環境

2.我解壓到了桌面,然后cd進了bin目錄


3.測試鏈接

按(an)照命令去連接數據庫,注意 -p 1433,-D 數據路名(ming)稱(cheng) -U 用戶名(ming) -P 密碼
sql默認(ren)端口(kou)(kou)都是1433,除(chu)非(fei)你特意改過,pymssql的默認(ren)端口(kou)(kou)也(ye)是這個(ge),除(chu)非(fei)你明(ming)確的知(zhi)道端口(kou)(kou)改了,否(fou)則不要動這個(ge)參(can)數。
回車(che)之后要是(shi)能連上就直接連上了,證明freetds在(zai)(zai)本機是(shi)可以用的(de)(de)。我的(de)(de)機器在(zai)(zai)這里提示了一下,編碼是(shi)默認的(de)(de)"CP936",而pymssql的(de)(de)默認編碼是(shi) UTF-8
4 萬(wan)惡的編(bian)碼(ma)轉換
知道是什么問題,就可以(yi)改(gai)了,在(zai)每(mei)個pymssql.connect 時候指定charset="CP936"就行(xing)了

搞(gao)定,不用(yong)(yong)pyodbc重(zhong)寫,不用(yong)(yong)重(zhong)裝(zhuang)純凈系(xi)統,不用(yong)(yong)使用(yong)(yong)pymssql的老版本然后自己編(bian)譯(yi)freetds,完美
這個問題(ti)困(kun)擾了很久,StackOverflow和其他論壇(tan)都沒能(neng)給出(chu)滿意的解(jie)決方案,可能(neng)我翻(fan)的不夠細致,還(huan)是官網靠譜,沒事(shi)多翻(fan)翻(fan)
原(yuan)創(chuang)不易,如(ru)有幫助,感謝點贊。