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的话需要先装上一个驱动。具体方法请自行百度~

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