Python 无法通过pymssql连接到SQL Server

Python 无法通过pymssql连接到SQL Server,python,pymssql,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 "p

我正在尝试通过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.
db=pymssql.connect(host='192.168.1.102',user='www',password='test',database='TestDB')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
pymssql.connect(pymssql.c:6041)中第457行的文件“pymssql.pyx”
提升接口错误(e[0])
pymssql.InterfaceError:连接到数据库失败,原因未知。
我尝试过的事情:

  • 将SQL Server和浏览器设置为作为网络服务器运行
  • 设置用户“www”。我还在SQLStudio中对该用户进行了本地测试
  • 关闭Windows防火墙(当然是暂时关闭)
  • 我错过了一些东西——我只是不知道它是什么。我在Windows上尝试了所有的无限菜单选项,但都没有用。我注意到的一点是,如果Windows防火墙打开(我为SQL Server设置了一个例外),python会暂停很长时间,然后给出错误。如果防火墙关闭,则会立即出现错误


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

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

    明白了!我认为问题的根源在于没有给予免费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。我在SQL Studio中手动将其设置为1433。另外,我使用的是TDS版本0.82,所以我不知道7.0如何适应

    接下来,我使用“tsql”测试了连接性,如下所示:

    tsql -S SomeDB -U www
    
    db = pymssql.connect(host='SomeDB',user='www',password='cylon',database='TestDB')
    
    我输入密码并获得一个允许SQL查询的命令行

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

    tsql -S SomeDB -U www
    
    db = pymssql.connect(host='SomeDB',user='www',password='cylon',database='TestDB')
    
    如您所见,我需要使用freetds.conf文件中的主机名,而不是直接使用IP。然后,我用附加的python代码测试了一个简单的查询,以确保我可以从数据库中读取数据


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

    看起来您已经解决了这个问题,但是对于其他从谷歌登陆到这里的人来说:检查以确保在您的MS SQL Server上启用了混合模式授权。默认情况下,它只允许Windows授权,这将在
    pymssql

    中导致此错误。对于低级调试,请使用wireshark。谢谢!我运行wireshark,它提供了一些数据——看起来是一个简单的“确认”。然而,似乎没有太多事情要做。信息显示“ms-sql-s>50051[RST,ACK]Seq=1 ACK=1 Win=0 Len=0。我看到了更多详细信息。“专家信息”显示“连接重置(RST)”-不确定原因。我发现我无法telnet 127.0.0.1 1433。我得到“连接失败”。我验证了服务器正在运行,端口#。我会继续尝试。你有“sql server management studio”吗”“谢谢!看来我确实需要特别指定端口1433。Wireshark显示了一些没有端口的其他响应。端口显示为“ms-sql-s”。我的Windows操作系统上似乎没有freetds.conf。我在连接字符串中遇到了同样的错误:
    host=10.43.32.211:1433,database=v00001,trusted=True
    噢,也许
    pymssql
    没有使用连接字符串,而是使用了名为params的参数(与其他一些库不同)。。。有点奇怪,但还好。