pymssql連接SQL Server長時間沒反應,pyodbc連接正常

  • 在用pymssql訪問SQL Server 數據庫的時候遇到了一個很奇怪的bug,在測試環境裏可以正常訪問連接,但是在另一臺服務器裏運行卻一直沒有反應,也沒有報錯。一直找不到原因,花了大把時間解決這個問題,最終還是放棄了,改用pyodbc

  • 一開始連接的時候沒反應我懷疑是網絡不通,但是我試了試 telnet 發現網絡是通的
    在這裏插入圖片描述
    所以排除了網絡的因素

  • 接下來就開始排除pymssql 的連接參數問題,因爲pymssql底層是調用 _mssql的,所以我同時也試了 直接用 _mssql 連:
    可以通過調用_mssql.connect()來創建這個類的一個實例。它接收以下參數。注意,除了位置定位的參數外,你還可以使用關鍵字參數。其中最主要的參數是 server;它可以有多種形式如下:

    參數名(類型) 說明

    • server (str) 你想要連接的數據庫服務器和實體。如:
      r’.\SQLEXPRESS’ –本地機器上的SQLEXPRESS實體(僅Windows)
    • r’(local)\SQLEXPRESS’ – 同上(僅Windows)
    • ‘SQLHOST’ – 默認端口上的默認實體(僅Windows)
    • ‘SQLHOST’ – 在freetds.conf中設置的指定端口上的指定實體 (僅Linux/*nix)
    • ‘SQLHOST,1433’ – 指定主機上的指定TCP端口
    • ’SQLHOST:1433’ – 同上
    • ’SQLHOST,5000’ – 如果你已經設置了一個實體在端口5000進行監聽
    • ’SQLHOST:5000’ – 同上
      參考文章 https://blog.csdn.net/lin_strong/article/details/82886691
_mssql 連接嘗試失敗
_mssql.MSSQLDatabaseException: (20010, b'DB-Lib error message 20010, severity 8:\nUnable to allocate sufficient memory (CITICS2\\CITICSZQGLB)\nOperating System error during No error (12)\n')

百度了一大圈也沒找到原因… 遂放棄

  • pymssql 的連接方式跟 _mssql 的連接方式差不多,主要在於 host, server 的區別,因爲默認端口都是 1433
  • 這裏需要注意的是 host 可以是一個 ip 地址,也可以是一個計算機名稱,比如 localhost 等價於 127.0.0.1
pymssql 連接則長時間沒有反應
  • 具體表現就是一直掛在那,也沒有報錯,很頭疼
最後用pyodbc連接成功
import pandas as pd
import pyodbc
conn = pyodbc.connect("DRIVER={SQL SERVER};SERVER=10.23.133.165,1433;UID=sa;PWD=sijia0419;DATABASE=GABAO"
df = pd.read_sql_query('select * from AUTH_INFO', conn)

而且pandas也支持pyodbc查詢,這就很方便了,但是如果用pyodbc的話需要先裝上一個驅動。具體方法請自行百度~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章