使用pymssql 2.2不连接SQL服务器

时间:2016-08-17 14:39:19

标签: freetds pymssql

我使用的是Mac OS系统安装而不是virtualenv。在这上面我安装了freetds和pymssql 2.1。使用以下方法将数据连接到数据库:

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

意识到virtualenv是做东西的正确方法我创建了一个基于python 2.7的虚拟环境,并尝试pip安装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调用在这些条件下失败了?

2 个答案:

答案 0 :(得分:0)

明确比隐含更好。最好始终包括端口号(至少我这样做)。

答案 1 :(得分:0)

查看以下两项:

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