完整報錯內容:20002, b'DB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (I0.185.43.12:1433)\n'
問題描述 :在python中,使用 psmssql 連接遠程數據庫,報上面的錯。通過別的機器連接遠端機沒問題,自己機器用別的工具(sqlcmd,naticat等)連接遠端機也沒問題,定位到問題出在本機使用pymssql 庫上
環境:win7sp1x64 + python3.5+pymssql2.1.3
解決方案:
官方鏈接:http://www.pymssql.org/en/stable/freetds.html
它推薦使用tsql命令先測試一下freetds的好壞,反正pymssql也是通過freetds來連接數據庫的,先排查freetds的問題。
1.下載windows系統下的tsql環境
2.我解壓到了桌面,然后cd進了bin目錄
3.測試鏈接
按照命令去連接數據庫,注意 -p 1433,-D 數據路名稱 -U 用戶名 -P 密碼
sql默認端口都是1433,除非你特意改過,pymssql的默認端口也是這個,除非你明確的知道端口改了,否則不要動這個參數。
回車之后要是能連上就直接連上了,證明freetds在本機是可以用的。我的機器在這里提示了一下,編碼是默認的"CP936",而pymssql的默認編碼是 UTF-8
4 萬惡的編碼轉換
知道是什么問題,就可以改了,在每個pymssql.connect 時候指定charset="CP936"就行了
搞定,不用pyodbc重寫,不用重裝純凈系統,不用使用pymssql的老版本然后自己編譯freetds,完美
這個問題困擾了很久,StackOverflow和其他論壇都沒能給出滿意的解決方案,可能我翻的不夠細致,還是官網靠譜,沒事多翻翻
原創不易,如有幫助,感謝點贊。