2010-11-11 207 views
8

我试图通过pymssql从本地服务器上的* nix系统连接到在Windows XP系统上运行的SQL Server。然而,连接失败如下图所示无法通过pymssql连接到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. 

事情我已经尝试:

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

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

有没有我可以在SQL Server中看到的日志?

+0

用于低级调试使用wireshark。 – 2010-11-11 01:27:55

+0

谢谢!我运行wireshark,它提供了一些数据 - 一个简单的“ack”出现。然而,似乎还没有太多要继续。信息显示“ms-sql-s> 50051 [RST,ACK] Seq = 1 Ack = 1 Win = 0 Len = 0 – Christopher 2010-11-11 02:44:29

+0

我看到更多详细信息”专家信息“指出”连接重置(RST)“ - 为什么。 – Christopher 2010-11-11 03:20:36

回答

11

Got it!我认为问题的根源不在于给予免费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 

然而,令人不解的是,我的端口设置为1219我有它手动设置为1433在SQL工作室。另外,我使用TDS版本0.82,所以我不知道该怎么配合7.0在

接下来,我使用“TSQL”如下测试连通性:

tsql -S SomeDB -U www 

我输入密码,并得到一个命令允许SQL查询的行。

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

db = pymssql.connect(host='SomeDB',user='www',password='cylon',database='TestDB') 

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

我希望这可以帮助别人在未来。

+0

我的Windows操作系统似乎没有freetds.conf。我得到了与连接字符串相同的错误:'host = 10.43.32.211:1433,database = v000001,trusted = True' – IAbstract 2015-03-24 19:42:14

+0

哦,也许'pymssql'不使用连接字符串,但命名为params(与其他一些库不同那里)...有点奇怪,但没关系。 – IAbstract 2015-03-24 19:46:00

0

是你在工作的Windows机器吗?指定端口1433. 它似乎是mssql客户端api中的一个错误,该错误尝试使用Namedpipes而不是TCP/IP。

+0

谢谢!看来我确实需要特别指定端口1433. Wireshark会显示其他端口的其他响应。显示“ms-sql-s”。 – Christopher 2010-11-11 02:45:07

2

看起来好像你已经解决了这个问题,但是对于来自Google的其他人来说,请检查以确保MS SQL Server上已启用混合模式授权。它默认只允许Windows授权,并且会在pymssql中导致此错误。