【发布时间】:2021-06-19 13:09:21
【问题描述】:
我正在尝试将 Python 连接到我们的远程 SQL Server,但我没有得到它。以下是我使用的代码。
server = 'server,1433'
database = 'db'
username = 'username'
password = 'pw'
cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()
cursor.execute('SELECT top 1 * FROM db.dbo.t_location')
for row in cursor:
print(row)
我们有 2 台服务器。一个是数据库服务器,但我使用连接到数据库服务器的 SQL 应用程序服务器。这是我得到的错误。我正在尝试一个星期,但我不确定我在这里错过了什么。 任何帮助将不胜感激
OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]TCP 提供程序: 不知道这样的主机。\r\n (11001) (SQLDriverConnect); [08001] [Microsoft ][适用于 SQL Server 的 ODBC 驱动程序 17]登录超时 (0);[08001] [Microsoft][适用于 SQL Server 的 ODBC 驱动程序 17]在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。请检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书。(11001)')
添加:
connection_str = ("Driver={SQL Server Native Client 11.0};"
"Server= 10.174.124.12,1433;"
#"Port= 1433;"
"Database=AAD;"
"UID=dom\user;"
"PWD=password;"
)
连接 = pyodbc.connect(connection_str) data = pd.read_sql("select top 1 * from dbo.t_location with (nolock);",connection)
我使用了上面的代码,现在我看到了这个错误。似乎它有效但无法登录。通常,一旦我将凭据用于登录远程桌面,我就必须在 SSMS 中使用 Windows 身份验证。
('28000', "[28000] [Microsoft][SQL Server Native Client 11.0][SQL Server]用户 'dom\user' 登录失败。(18456) (SQLDriverConnect); [28000] [Microsoft][ SQL Server Native Client 11.0][SQL Server]用户 'dom\user' 登录失败。(18456)")
答案:
我很高兴我终于找到了使用 pymssql 的解决方案。我不知道 pyodbc 没有工作,但我确信我一定做错了什么。我使用以下代码使用 Python 从远程 SQL 服务器获取数据。
import pymssql
conn = pymssql.connect(
host=r'10.174.124.12',
user=r'dom\user',
password=r'password',
database='db'
)
cursor = conn.cursor(as_dict=True)
cursor.execute('Select top 4 location_id, description from t_location with (nolock)')
data = cursor.fetchall()
data_df = pd.DataFrame(data)
cursor.close()
此时忽略我的代码。我仍然需要做一些清理工作,但这段代码可以工作。
【问题讨论】:
-
错误消息的重要部分是:找不到服务器或无法访问。检查您动态生成的连接字符串 FIRST 并验证它是否具有正确的信息。如果正确,请尝试connection troubleshooter
-
在调试时,请停止在查询中使用 3 个部件名称。连接应该确定数据库。使用 3 个部分名称(例如 DB.SCHEMA.TABLE)会使您的代码更难迁移到不同的环境。
-
"我们有 2 台服务器。一台是数据库服务器,但我使用 SQL 应用程序服务器连接到数据库服务器。" - 听起来您正在尝试连接到错误的服务器。对于直接数据库连接,您需要连接到运行数据库服务器软件的机器。
标签: python sql-server pyodbc remote-server