使用 pymssql 2.2 未连接到 SQL 服务器

Posted

技术标签:

【中文标题】使用 pymssql 2.2 未连接到 SQL 服务器【英文标题】:Using pymssql 2.2 not connecting to SQL server 【发布时间】:2016-08-17 14:39:18 【问题描述】:

我使用的是 Python 的 Macos 系统安装,而不是 virtualenv。为此,我安装了 freetds 和 pymssql 2.1。这可以很好地连接到数据库,使用:

pymssql.connect(server='the.host.name\instance', user='username' etc . . ). 

意识到 virtualenv 是做事的正确方法,我创建了一个基于 python 2.7 的虚拟环境并尝试 pip install pymssql 但收到错误消息。快速搜索找到了修复 - 即从 git 安装:

pip install git+https://github.com/pymssql/pymssql.git

但现在我的连接调用返回主机无响应错误。我使用 tsql 进行调试(TDSDUMP=stdout),看起来地址\实例引起了问题。连接到有地址但没有实例的数据库可以正常工作

当我恢复到系统范围的安装并运行它时,我看到 freetds 将数据库实例的端口号解析为特定端口 (portNo)。

在我的 virtualenv 下,如果我使用这个端口号调用 pymssql,我的连接就很好。

pymssql.connect(server='the.host.name\instance', user='username', port='portNo', etc . . .)

虽然这项工作有效 - 我猜服务器上的任何更改都可能会破坏它。

任何想法为什么我的 pymssql 调用在这些情况下失败?

【问题讨论】:

【参考方案1】:

显式优于隐式。最好始终包含端口号(至少我这样做)。

【讨论】:

【参考方案2】:

复习以下两项:

确保 pymssql 的两个安装(全局安装和您在 virtualenv 中获得的安装)实际上链接到相同的 FeeeTDS 版本。可能是您安装了多个 FreeTDS 版本,这就是您看到不同行为的原因。 当 server 参数包含 \ 字符时,请确保将其双引号 ('the.host.name\\instance') 或使用原始字符串表示法 (r'the.host.name\instance')。这是标准的 Python 开发实践。

【讨论】:

以上是关于使用 pymssql 2.2 未连接到 SQL 服务器的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 pyodbc/pymssql 和 Robot Framework 连接到 SQL\Express

使用 proguard 后,Android apk 未连接到 Azure 服务器

无法使用 pymssql 烧瓶连接到 ms sql 服务器

为啥我可以使用 tsql 而不是 pymssql 连接到 Azure MS SQL?

tsql 实用程序 (FreeTDS) 可以连接到 SQL Server,但 pymssql 不能

App Engine Java Servlet 未连接到 Cloud SQL