【发布时间】: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