Client-side pyodbc error: "Server does not exist or access denied."
Client-side pyodbc error: "Server does not exist or access denied."
我有一个 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 和密码,但它给出了同样的错误。此外,同一名员工可以毫无问题地通过 SQL Server Management Studio 登录和执行查询。
由于我们部门的其他人仍然可以正常使用该应用程序,我知道这一定是客户端问题,但我无法确定问题所在。任何输入将不胜感激,谢谢!
更新:
根据下面 flipperPA 的回答,我更新了我的连接字符串以包含端口:
con = pyodbc.connect('''DRIVER={SQL Server};
SERVER=<myServer_name>;
PORT=1433;
DATABASE=<myDB_name>;
UID=personsUser;
PWD=personsPassword;''')
不幸的是,我们仍然遇到同样的错误。
他是 运行 32 位 Windows 7 HP 机器,与组内其他人的设置相同,因此不应该是 os 级别问题。
他确实在同一台机器上运行 SSMS,但我 运行 通过 telnet 检查确定 - 没问题。
我自学了 pyodbc API 和基本 SQL,但我对数据库和远程连接的基本概念还是比较陌生。您能再解释一下 TDS 驱动程序吗?
当包含 SERVER 时,我发现您通常还需要包含 PORT;这是最有可能的问题:
pyodbc.connect('DRIVER={SQL Server};
SERVER=<myServer_name>;
PORT=1433;
DATABASE=<myDB_name>;
UID=personsUser;
PWD=personsPassword')
不过,我主要通过 Linux 连接。难道对方是从MacOS/X或者Linux连接的?如果是这样,他们将需要使用 FreeTDS 驱动程序(MS 也提供了一个,但充其量是不稳定的)。如果你仍然有问题,从同事的机器上,确保你可以从你有问题的机器连接(除非它是他们可以从中连接 SSMS 的同一台机器):
telnet <myServer_name> 1433
如果连接成功,则说明一切正常,如果连接挂起,则很可能是防火墙问题。祝你好运!
在与一位知识渊博的朋友交谈后,我终于弄清楚了我的问题!
出于某种原因,用户的系统被配置为使用命名管道进行连接,但我连接的服务器只启用了 TCP/IP 协议。解决方案是通过在服务器名称前面添加 "tcp:" 来强制应用程序使用 TCP/IP。
固定连接字符串:
pyodbc.connect('''DRIVER={SQL Server};
SERVER=tcp:<myServer_name>;
PORT=1433;
DATABASE=<myDB_name>;
UID=personsUser;
PWD=personsPassword
''')
我有一个 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 和密码,但它给出了同样的错误。此外,同一名员工可以毫无问题地通过 SQL Server Management Studio 登录和执行查询。
由于我们部门的其他人仍然可以正常使用该应用程序,我知道这一定是客户端问题,但我无法确定问题所在。任何输入将不胜感激,谢谢!
更新:
根据下面 flipperPA 的回答,我更新了我的连接字符串以包含端口:
con = pyodbc.connect('''DRIVER={SQL Server};
SERVER=<myServer_name>;
PORT=1433;
DATABASE=<myDB_name>;
UID=personsUser;
PWD=personsPassword;''')
不幸的是,我们仍然遇到同样的错误。
他是 运行 32 位 Windows 7 HP 机器,与组内其他人的设置相同,因此不应该是 os 级别问题。
他确实在同一台机器上运行 SSMS,但我 运行 通过 telnet 检查确定 - 没问题。
我自学了 pyodbc API 和基本 SQL,但我对数据库和远程连接的基本概念还是比较陌生。您能再解释一下 TDS 驱动程序吗?
当包含 SERVER 时,我发现您通常还需要包含 PORT;这是最有可能的问题:
pyodbc.connect('DRIVER={SQL Server};
SERVER=<myServer_name>;
PORT=1433;
DATABASE=<myDB_name>;
UID=personsUser;
PWD=personsPassword')
不过,我主要通过 Linux 连接。难道对方是从MacOS/X或者Linux连接的?如果是这样,他们将需要使用 FreeTDS 驱动程序(MS 也提供了一个,但充其量是不稳定的)。如果你仍然有问题,从同事的机器上,确保你可以从你有问题的机器连接(除非它是他们可以从中连接 SSMS 的同一台机器):
telnet <myServer_name> 1433
如果连接成功,则说明一切正常,如果连接挂起,则很可能是防火墙问题。祝你好运!
在与一位知识渊博的朋友交谈后,我终于弄清楚了我的问题!
出于某种原因,用户的系统被配置为使用命名管道进行连接,但我连接的服务器只启用了 TCP/IP 协议。解决方案是通过在服务器名称前面添加 "tcp:" 来强制应用程序使用 TCP/IP。
固定连接字符串:
pyodbc.connect('''DRIVER={SQL Server};
SERVER=tcp:<myServer_name>;
PORT=1433;
DATABASE=<myDB_name>;
UID=personsUser;
PWD=personsPassword
''')