【发布时间】:2020-09-04 23:15:00
【问题描述】:
我正在尝试使用 pyodbc 连接到 SQL Server 以查询某些表的工作。我能够连接到我们的一台服务器并运行 SQL 查询,但相同的代码不适用于不同的服务器。我得到的错误信息是这样的:
Error: ('008001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]
SQL Server does not exist or access denied. (17) (SQLDriverConnect)')
这是我正在使用的代码:
import pyodbc
import pandas as pd
conn = pyodbc.connect('Driver={SQL Server};'
'Server=servername;'
'Database=databasename;'
'Trusted_Connection=yes;')
[rest of code]
代码适用于一台服务器,但是当我将服务器和数据库名称更改为另一台服务器时,我收到错误消息(服务器/数据库名称中没有拼写错误)。我可以通过 SQL 访问该服务器。此外,我能够访问此服务器并使用 Excel VBA 查询/更新其表(即使它不会在 Python 中连接)。
根据我的研究,我没有完全理解许多可能的问题。我曾尝试更改代码中的驱动程序名称,但失败了。由于此代码用于工作,因此有一些安全权限阻止我尝试某些解决方案。
什么可能导致此问题?如果有人能指出我正确的方向,那将有助于我向我们的 IT 团队提出更好的问题,如果我自己无法解决的话。
(我将 Microsoft SQL Server Management Studio 17 和 Python 3.6 与 Spyder 一起使用。)
【问题讨论】:
-
您是否尝试通过 Microsoft SQL Server Management Studio 连接到无法在您的 python 代码中运行的服务器?既然是给你工作的,可能其他的Sql Server有一些IP限制你检查了吗?
-
是的,我可以通过 Microsoft SQL Server Management Studio 连接到服务器,但不是 python。我已经更新了问题以反映这一点。我会研究 IP 限制,我还没有研究过。
-
如果你能连接到Sql management studio,那么它就没有ip限制。也可以用一个衬垫试试,所以代码中没有新行......如果它是一个非本地服务器,它可能需要 tcp: 前缀。 pyodbc.connect('Driver=SQL Server Native Client 11.0;Server=tcp:{server};UID=username;PWD=password;Database=database;TIMEOUT=5;')
-
我收到相同的错误消息,将其组合在一行中。然后我还通过更改驱动程序并添加我的用户名/密码来尝试该代码,它给了我以下错误消息:“命名管道提供程序:无法打开与 SQL Server [53] 的连接。(53)(SQLDriverConnect)”添加“tcp”前缀似乎也没有帮助。通常我不需要输入我的用户名或密码来连接到服务器,那么我在 python 代码中需要它吗?
标签: python sql-server pyodbc