使用 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 服务器
为啥我可以使用 tsql 而不是 pymssql 连接到 Azure MS SQL?