【问题标题】:Unable to connect to SQL Server via pymssql无法通过 pymssql 连接到 SQL Server
【发布时间】:2011-05-08 05:21:20
【问题描述】:

我正在尝试通过 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.

我尝试过的事情:

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

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

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

【问题讨论】:

  • 低级调试使用wireshark。
  • 谢谢!我运行了wireshark,它提供了一些数据——它出现了一个简单的“ack”。然而,似乎没有太多事情要做。信息显示“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”吗?

标签: python pymssql


【解决方案1】:

知道了!我认为问题的根源在于没有给予 Free TDS 所需的关注。 Free 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

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

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

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

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

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

【讨论】:

  • 我的 Windows 操作系统上似乎没有 freetds.conf。我在连接字符串中遇到了同样的错误:host=10.43.32.211:1433, database=v000001, trusted=True
  • 哦,也许 pymssql 不使用连接字符串,而是命名为 params(与其他一些库不同)......有点奇怪,但没关系。
【解决方案2】:

看起来你已经解决了这个问题,但是对于来自谷歌的其他人来说:检查以确保在你的 MS SQL Server 上打开了混合模式授权。它默认只允许 Windows 授权,这将导致 pymssql 出现此错误。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 谢谢!看来我确实需要专门指定端口 1433。 Wireshark 显示一些没有端口的其他响应。使用端口显示“ms-sql-s”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多