【问题标题】:Timing out while trying to connect to sql in Azure Managed Instance from Azure VM尝试从 Azure VM 连接到 Azure 托管实例中的 sql 时超时
【发布时间】:2021-05-02 08:33:03
【问题描述】:

我正在尝试从 Azure VM 机器中的 python 脚本访问 Azure 托管实例(IP:xxxx.database.windows.net)中 SQL 数据库中的表,但我收到以下操作错误。我尝试了以下两种不同的方法。

错误:

OperationalError: ('08001', '[08001] [Microsoft][SQL Server Native Client 11.0]TCP Provider: 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机未能响应。\r\n (10060) (SQLDriverConnect);[08001] [Microsoft][SQL Server Native Client 11.0]登录超时已过期 (0);[08001] [Microsoft][SQL Server Native Client 11.0 ]建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。找不到或无法访问服务器。请检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL服务器联机丛书。(10060)')

连接字符串的第一种方式:

import pandas as pd
from sqlalchemy import create_engine

engine = create_engine("mssql+pyodbc://<username>:<password>@<server>/<database>?driver=SQL+Server+Native+Client+11.0")
query = "select * from table"
df=pd.read_sql(query,engine)

连接字符串的第二种方式:

import pyodbc

server = 'xxx.database.windows.net'
database = 'database'
username = 'username'
password = 'password'   
driver= '{SQL Server Native Client 11.0}'
with pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password) as conn:
    with conn.cursor() as cursor:
        cursor.execute("SELECT TOP 3 name, collation_name FROM sys.databases")
        row = cursor.fetchone()
        while row:
            print (str(row[0]) + " " + str(row[1]))
            row = cursor.fetchone()

另外,我也试过把驱动改成下面的驱动,还是不行。

{ODBC Driver 11 for SQL Server}
{ODBC Driver 13 for SQL Server}
{ODBC Driver 17 for SQL Server}
{SQL Server Native Client 11.0}

有趣的是,如果我尝试使用非 Azure VM 的本地机器(例如:我的本地机器或我可以 RDP 连接到的其他服务器)的 same 连接字符串进行连接,我可以访问数据库。但是当我在 Azure VM 机器上尝试时,它会超时。您对如何解决此问题有任何想法吗?

感谢您的意见。

【问题讨论】:

  • 嗯... ref:SQL Server Native Client SQL Server Native Client (SQLNCLI) 仍然不推荐使用,不建议将其用于新的开发工作。相反,请使用新的 Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL),它将使用最新的服务器功能进行更新。
  • 尝试让{ODBC Driver 17 for SQL Server} 工作。
  • @AlwaysLearning 谢谢你的回答。我已经尝试将 {ODBC Driver 17 for SQL Server} 作为连接字符串中的驱动程序。可悲的是,没有运气。我也从您发送的链接更新了驱动程序。我认为问题出在 Azure 方面,但无法解决。
  • documentation 对您有帮助吗?
  • @JosephXu 是的,你是对的,防火墙导致了这个问题。谢谢你的朋友。

标签: python sql-server pyodbc azure-virtual-machine azure-managed-database


【解决方案1】:

所以最后我们发现是防火墙导致了这个问题。我们需要先检查防火墙规则。

【讨论】:

    猜你喜欢
    • 2019-06-08
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多