无法通过PymSq连接到SQL Server

2024-04-28 19:29:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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 Server和browser设置为作为网络服务器运行。
  2. 设置用户“www”。我还在SQL Studio中本地测试了这个用户。
  3. 关闭了Windows防火墙(当然是暂时的)。

我错过了什么-我只是不知道是什么。我在Windows上尝试了所有的无限菜单选项,但都没有成功。我注意到的一件事是,如果Windows防火墙打开(我为SQL Server设置了一个异常),python会暂停很长时间,然后给出错误。如果防火墙关闭,则错误是即时的。

我可以在SQL Server中查看日志吗?


Tags: 用户in服务器sqlserverwindows系统www
3条回答

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

明白了!我认为问题的根源是没有给予免费TDS所需的关注。免费TDS显然是PymSQL背后的驱动程序,并提供与其他数据库的连接—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。我在SQL Studio中将它手动设置为1433。另外,我正在使用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代码测试了一个简单的查询,以确保我可以从数据库中读取数据。

我希望这对将来的其他人有帮助。

看起来你已经解决了这个问题,但是对于其他登陆这里的google用户来说:检查以确保在MS SQL服务器上打开了混合模式授权。它默认只允许Windows授权,这将在pymssql中导致此错误。

相关问题 更多 >