【问题标题】:What can cause pyodbc to connect to one SQL Server and not another?什么会导致 pyodbc 连接到一个 SQL Server 而不是另一个?
【发布时间】: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


【解决方案1】:

试试这个驱动:

 SQLserver_settings = {'server': 'servername', 'database': 'database', 'username': 'username', 'password': 'password', 'driver': '{ODBC Driver 17 for SQL Server}'}

cnxn = pyodbc.connect('DRIVER=' + SQLserver_settings['driver'] + ';SERVER=' + SQLserver_settings['server'] + ';PORT=1433;DATABASE=' + SQLserver_settings['database'] + ';UID=' + SQLserver_settings['username'] +';PWD=' + SQLserver_settings['password'])

【讨论】:

  • 我尝试将其更改为该驱动程序,但我收到此错误消息:“'IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver指定 (0) (SQLDriverConnect)'"
  • @Clare 您需要安装 msodbcsql17 才能工作。 docs.microsoft.com/en-us/sql/connect/odbc/…
  • @Damião Martins 我安装了 msodbcsql17 并尝试了代码,现在我收到以下错误:“[Microsoft][ODBC Driver 17 for SQL Server]Named Pipes Provider: could not open a connection to SQL Server [53] (53) (SQLDriverConnect)”。你有什么想法吗?
  • @Clare 与连接信息有关的错误,例如服务器名称或端口号。检查这个答案:stackoverflow.com/a/29078480/3010548
猜你喜欢
  • 2010-09-12
  • 2021-05-12
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
相关资源
最近更新 更多