连接到 azure SQL 时出现 ODBC 驱动程序 17 错误

问题描述 投票:0回答:1

将我的代码从本地计算机(Windows)连接到 azure SQL 以及部署到 azure 函数(python/linux)时,我收到以下错误

sqlalchemy.exc.OperationalError: (pyodbc.OperationalError) ('08001', '[08001] [Microsoft][SQL Server 的 ODBC 驱动程序 17]TCP 提供程序:A 数据库查找期间发生不可恢复的错误。 (11003) (SQLDriverConnect); [08001] [Microsoft][用于 SQL 的 ODBC 驱动程序 17 服务器]登录超时已过期(0); [08001] [微软][ODBC 驱动程序 17 对于 SQL Server]出现与网络相关或特定于实例的错误 建立与 SQL Server 的连接时发生。服务器不是 已找到或无法访问。检查实例名称是否正确以及SQL是否正确 服务器配置为允许远程连接。了解更多信息 请参阅 SQL Server 联机丛书。 (11003)')

我能够使用 SQL Server Management Studio 连接到 SQL Server

我的连接 SQL Server 的示例代码

from sqlalchemy import create_engine
connection_string = "mssql+pyodbc://user:[email protected]/mydatabase?driver=ODBC+Driver+17+for+SQL+Server" 
self.engine = create_engine(connection_string, pool_size=100, max_overflow=20)
self.engine.connect()
  • 我的机器上安装了 SQL Server (2019),但还安装了 ODBC 驱动程序 17 和 18
  • 将 python 从 3.11 降级到 3.9(类似问题
  • 使用SQL SErver管理工作室,我能够连接到SQL 我的 Windows 机器上的服务器
  • 使用 VS Code 在 azure 功能(无服务器)上部署,因此不支持 docker 镜像
python sqlalchemy azure-sql-database pyodbc
1个回答
0
投票

请在连接字符串中添加以下项目:

;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;"

下面是我从另一个问题中提取的有关如何从 SqlAlchemy 连接的完整示例。

import urllib
from sqlalchemy import create_engine,text
import pandas as pd

server   = 'servername.database.windows.net'
database = 'databasename'
username = 'username'
password = 'password!'   
driver   = '{ODBC Driver 17 for SQL Server}'

conn = f"""Driver={driver};Server=tcp:{server},1433;Database={database};
Uid={username};Pwd={password};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;"""

params = urllib.parse.quote_plus(conn)
conn_str = 'mssql+pyodbc:///?autocommit=true&odbc_connect={}'.format(params)
engine = create_engine(conn_str, echo=True)

query = 'SELECT @@version'

with engine.connect() as connection:
    df = pd.read_sql_query(sql=text(query), con=connection)
print(df.to_markdown())
© www.soinside.com 2019 - 2024. All rights reserved.