客户端pyodbc错误:“服务器不存在或访问被拒绝。”

2024-04-27 19:37:28 发布

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

我有一个python应用程序,设计用于使用pyodbc从远程数据库服务器提取数据,然后在电子表格中组织和显示数据。我已经让它工作几个月了,在我的部门中有多个同事通过一个共享的网络文件夹使用它。

我的连接:

pyodbc.connect('DRIVER={SQL Server};
                SERVER=<myServer_name>;
                DATABASE=<myDB_name>;
                UID=personsUser;
                PWD=personsPassword')

同一网络中的另一名员工最近尝试使用该程序,但出现以下错误:

pyodbc.Error: ('08001','[08001][Microsoft][ODBC SQL Server Driver]
[DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect)')

对我来说,这看起来是一个简单的权限问题,所以为了确认我用自己的硬编码替换了用户id和密码,但它给出了相同的错误。此外,同一个员工可以通过sqlservermanagementstudio登录并执行查询,而不会出现问题。

因为我们部门的其他人仍然可以很好地使用这个应用程序,所以我知道这肯定是客户端的问题,但我只是无法确定问题所在。如有任何意见,将不胜感激,谢谢!

更新:

根据flipperPA下面的回答,我更新了连接字符串以包含端口:

con = pyodbc.connect('''DRIVER={SQL Server};
                        SERVER=<myServer_name>;
                        PORT=1433;
                        DATABASE=<myDB_name>;
                        UID=personsUser;
                        PWD=personsPassword;''')

不幸的是我们还是犯了同样的错误。

他在一台惠普电脑上运行32位Windows 7,与小组其他人的安装程序相同,所以这不应该是操作系统级的问题。

他确实在同一台机器上操作SSMS,但我查了一下telnet检查,只是确定-没有问题。

我自学了pyodbc API和基本SQL,但对数据库和远程连接的基本概念还比较陌生。你能再解释一下TDS司机吗?


Tags: 数据name网络数据库应用程序sql远程server
2条回答

在和一位知识渊博的朋友交谈之后,我终于找到了我的问题!

出于某种原因,用户的系统被配置为使用命名管道进行连接,但我连接的服务器仅启用了TCP/IP协议。解决方案是通过在服务器名称前面添加“TCP:”来强制应用程序使用TCP/IP。

固定连接字符串:

pyodbc.connect('''DRIVER={SQL Server};
                  SERVER=tcp:<myServer_name>;
                  PORT=1433;
                  DATABASE=<myDB_name>;
                  UID=personsUser;
                  PWD=personsPassword
               ''')

当包含服务器时,我发现您通常也需要包含端口;这是最可能出现的问题:

pyodbc.connect('DRIVER={SQL Server};
                SERVER=<myServer_name>;
                PORT=1433;
                DATABASE=<myDB_name>;
                UID=personsUser;
                PWD=personsPassword')

不过,我主要是从Linux连接的。可能是其他人正在从Mac OS/X或Linux连接?如果是这样,他们将需要使用FreeTDS驱动程序(MS也提供了一个驱动程序,但它充其量是不稳定的)。如果您仍然有问题,请确保可以从有问题的计算机连接(除非它们可以从同一台计算机连接SSM):

telnet <myServer_name> 1433

如果它连接了,你很好,如果它挂在连接上,你很可能会看到防火墙问题。祝你好运!

相关问题 更多 >