无法在 Windows 上从 Python 连接到 MSSQL Server

Posted

技术标签:

【中文标题】无法在 Windows 上从 Python 连接到 MSSQL Server【英文标题】:Unable to connect to MSSQL Server from Python on Windows 【发布时间】:2016-05-02 11:42:55 【问题描述】:

我无法在 Windows 10 上从 Python(3.4.4 64 位)连接到 SQL Server。这就是我所做的:

    我发现this 不错的图书馆。 然后,我关注this 页面并安装了FreeTDS 之后我用这个命令安装了 pymssqleasy_install pymssql 在 SQL Server 网络配置中,我为我的 SQLEXPRESS 实例启用了命名管道和 TCP/IP

所以,此时我可以使用 SQL Server Management Studio 运行 SQL Server 并连接到我的数据库。当我登录时,我使用DESKTOP-1JA5E9F\SQLEXPRESS 作为服务器名称,sa 作为登录名,123 作为密码。此外,在 Python shell 中,我可以导入 pymssql,例如:

>>> import pymssql

它不会引发任何错误。但是,我无法连接到我的数据库实例。我尝试了几十种尝试,例如:

 conn = pymssql.connect(host=r'DESKTOP-1JA5E9F\SQLEXPRESS', 
                        user=r'sa', password=r'123', database=r'reestr')

^^^ 上面的代码永远不会完成(我看到只是在 shell 中闪烁 _,那是永远闪烁)。我也试过这个:

conn = pymssql.connect(host=r'SQLEXPRESS', user=r'sa', password=r'123', database=r'reestr')

这导致pymssql.InterfaceError: Connection to the database failed for an unknown reason.。我试过这个:

conn=pymssql.connect(host=r'SQLEXPRESS:1433',user=r'sa',password=r'123', database=r'reestr')

它也会导致相同的错误消息。所以,如果有人知道那些可以做到这一点的魔法巫毒咒语,欢迎您。

【问题讨论】:

您有freetds.conf 文件吗? pymssql.org/en/v2.1.2/freetds.html#configuration 是的,我在 C:\ 文件夹中有它,内容完全相同。 ***.com/questions/9165031/… 根据该用户的说法,“SQL Server Browser”服务必须在 SQL Server 的主机上运行。 由于某种原因,无法启用它。我只能启用 SQL Server 和 SQL Server VSS Writer 在配置管理器中,由于 SQL Server Browser 的某些原因,启动、暂停和其他命令被禁用。 【参考方案1】:

根据docs,不再有host 关键字arg,而是server。它也应该是服务器名称,而不是实例名称,或完整的实例名称(带有服务器名称)。请参阅 connect() description 和 examples of name construction for Connection class。

在您的情况下,服务器名称是 DESKTOP-1JA5E9F.(local) 应该可以工作,因为您在本地计算机上完成所有操作;您的命名实例名称是SQLEXPRESS

试试这些:

import pymssql

#for instance with known name 'SQLEXPRESS'
conn = pymssql.connect(server=r'DESKTOP-1JA5E9F\SQLEXPRESS', 
                       user=r'sa', password=r'123', database=r'reestr')
#on localhost this should work too
conn = pymssql.connect(server=r'.\SQLEXPRESS', 
                       user=r'sa', password=r'123', database=r'reestr')

#for default instance with port taken from freetds.conf
#(this probably won't work for your case, because you use named instance
#instead of default instance, which is named MSSQLSERVER)
conn = pymssql.connect(server=r'DESKTOP-1JA5E9F', user=r'sa', password=r'123',    
                       database=r'reestr')

#for instance on known port '1433'
conn = pymssql.connect(server=r'DESKTOP-1JA5E9F:1433', user=r'sa', password=r'123',
                       database=r'reestr')

如果这没有帮助,请将tsql 的连接测试为described in the docs,例如:

tsql -H DESKTOP-1JA5E9F -p 1433 -U sa -P 123 -D reestr

或者如果你有freetds.conf:

tsql -S 'DESKTOP-1JA5E9F\SQLEXPRESS' -U sa -P 123 -D reestr

【讨论】:

谢谢你,尼基塔!我今天会检查它。至于tsql,在我的 Windows 机器上这个命令不起作用,即使我按照说明安装了 freetds。如果您能提供更多关于 tsql 以及在 Windows 上使用它的方式的信息,那就太好了。 @Jacobian,看起来tslq 不在系统PATH 上,因为文档中提到,您可能希望手动将安装中的一些文件夹添加到PATH。但是您可以直接从命令行运行它而无需修改PATH 变量,只需使用完整路径规范即可。 tsql 应该在 FreeTDS 安装目录的某个位置,probably in src/apps。只需使用 Windows 搜索,即可找到 tsql 好吧,我尝试了你答案中的前两个和最后一个示例,但我得到的只是控制台中_ 的无限闪烁。我没有收到任何错误消息,但我也没有得到任何结果。当我尝试使用 tsql 连接到服务器时,同样发生了 - 控制台中永远不会改变的最后一行是 Setting reestr as default database in login packet ... 可能,我需要在 SQL Server 配置管理器中进行一些额外的操作。我所知道的是 1) 命名管道和 TCP/IP 启用 2) SQL Server、SQL Server 代理和 SQL Server 浏览器正在运行。可能应该有一些额外的 IP 和端口调整。我不知道。 好吧,我对 SQL Server 配置管理器中的 IP 地址选项卡进行了一些操作,现在它可以工作了。感谢您的帮助!

以上是关于无法在 Windows 上从 Python 连接到 MSSQL Server的主要内容,如果未能解决你的问题,请参考以下文章

在 Linux 上从 Python 连接到受保护的 WiFi

在 Linux 上从 PHP 连接到 MS Access 数据库

windows上从python连接odbc的常用方法? [关闭]

无法使用 Ganache GUI 连接到 Truffle 或 testrpc

如何将MySQL服务器连接到工作台

无法从 python-ldap 连接到 Windows Server 2016 上的 ldaps