Python中使用pymssql连接SQL Server总是没反应
一、问题场景
仅仅是一个简单的连接数据库的操作,运行之后就一直是运行中迟迟无响应
pymssql.connect(server=host, user=username, password=password, database=database, port=port)
二、原因分析
我这里只简单阐述一下我这里遇到该问题的原因,是 pymssql 使用
FreeTDS
包连接到 SQL Server 实例。您必须告诉它如何找到您的数据库服务器。最基本的信息是主机名、端口号和要使用的协议版本
。但是我遇到这个问题是因为没有告诉它要使用的协议版本
。更多可能引起该问题的原因见参考文献1
。
三、排查思路
参考参考文献1
中的提示:
在要运行的代码前加入下述代码,运行项目控制台就会多输出很多日志信息
import os
os.environ['TDSDUMP'] = 'stdout'
观察日志信息中的错误信息,可以看到没有找到freetds.conf,我们前往日志中给到的路径中检查对应配置文件,确实没有发现FreeTDS的配置文件
config.c:174:Attempting to read conf files.
config.c:362:... $FREETDSCONF not set. Trying $FREETDS/etc.
config.c:375:... $FREETDS not set. Trying $HOME.
config.c:301:Could not open 'C:\Users\Administrator\AppData\Roaming/.freetds.conf' ((.freetds.conf)).
config.c:301:Could not open 'c:\freetds.conf' ((default)).
四、解决方案
说明:下述解决方案中指定/配置的的FreeTDS的版本可根据自己的情况参考参考文献3
进行选择
解决方案一
参考参考文献2
中的提示在排查思路
中错误日志中查找的路径下手动创建FreeTDS的配置文件.freetds.conf
,内容如下
[global]
tds version = 7.0
解决方案二
建立数据库连接时通过tds_version
参数指定FreeTDS的版本
pymssql.connect(server=host, user=username, password=password, database=database, port=port, tds_version='7.0')
五、参考文献
【1】Frequently asked questions
【2】FreeTDS
【3】Choosing a TDS protocol version