无法通过pymssql连接到SQL Server

Chr*_*her 12 python pymssql

我试图通过pymssql从本地服务器上的*nix系统连接到运行在Windows XP系统上的SQL Server.但是,连接失败,如下所示

db = pymssql.connect(host='192.168.1.102',user='www',password='test',database='TestDB')
Traceback (most recent call last):

File "<stdin>", line 1, in <module>
File "pymssql.pyx", line 457, in pymssql.connect (pymssql.c:6041)
raise InterfaceError(e[0])
pymssql.InterfaceError: Connection to the database failed for an unknown reason.
Run Code Online (Sandbox Code Playgroud)

我试过的事情:

  1. 将SQL Server和浏览器设置为作为网络服务器运行.
  2. 设置用户'www'.我还在SQL Studio中本地测试了这个用户.
  3. 关闭Windows防火墙(暂时当然).

我错过了某些东西 - 我只是不知道它是什么.我在Windows上尝试了所有无限的菜单选项都无济于事.我注意到的一件事是,如果打开了Windows防火墙(我为SQL Server设置了一个例外),python会暂停很长时间然后给出错误.如果防火墙关闭,则错误是即时的.

我可以在SQL Server中看到任何日志吗?

Chr*_*her 13

得到它了!我认为问题的根源在于没有给予免费TDS所需的关注.免费TDS显然是pymssql背后的驱动程序,并提供与其他数据库的连接 - SQL Server就是其中之一.

freetds.conf文件位于我的系统(Mac Book Pro)上的/ usr/local/etc中.

此文件包含安装的默认值.但是,我之前添加了一个定义,以便我可以连接但忘了它,不幸的是没有记录它.

无论如何,这是我附加到freetds.conf的示例:

[SomeDB]
    host = 192.168.1.102
    port = 1219
    tds version = 7.0
Run Code Online (Sandbox Code Playgroud)

然而,令人费解的是我将端口设置为1219.我在SQL Studio中手动设置为1433.此外,我使用TDS版本0.82所以我不知道7.0如何适应.

接下来,我使用'tsql'测试连接如下:

tsql -S SomeDB -U www
Run Code Online (Sandbox Code Playgroud)

我输入密码并获得一个允许SQL查询的命令行.

接下来,我使用pymssql测试连接如下:

db = pymssql.connect(host='SomeDB',user='www',password='cylon',database='TestDB')
Run Code Online (Sandbox Code Playgroud)

如您所见,我需要使用freetds.conf文件中的主机名而不是IP.然后,我使用额外的python代码测试了一个简单的查询,以确保我可以从数据库中读取.

我希望将来可以帮助别人.