1

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

错误:

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 Server 联机丛书. (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 连接到的其他服务器)使用相同的连接字符串进行连接,我可以访问数据库。但是当我在 Azure VM 机器上尝试时,它会超时。您对如何解决此问题有任何想法吗?

感谢您的投入。

4

1 回答 1

0

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

于 2021-02-06T12:14:24.733 回答