You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure App Service中Flask-Python应用用pyodbc连SQL Server报错

问题解决:Azure App Service Linux 上 Flask-Pyodbc 连接 SQL Server 驱动缺失问题

关于 sudo 不可用的原因

Azure App Service Linux 运行在多租户沙箱环境中,出于安全和资源隔离的限制,普通用户没有 root 权限,因此无法使用 sudo 命令修改系统级配置或安装软件。

Azure App Service 是否支持 ODBC 驱动?

不是完全不支持,只是不能通过常规的系统包管理器安装。可以通过以下两种方式解决驱动缺失问题:

方法1:自定义驱动部署 + 环境变量配置

既然无法修改系统目录,可将 ODBC 驱动安装到应用自身的目录下,然后通过环境变量指定驱动路径:

  1. 在应用根目录创建 drivers 文件夹,通过 Kudu 终端或部署脚本下载对应版本的 ODBC Driver 17 for SQL Server 二进制包(Debian 9 版本),解压到该文件夹。
  2. 在应用根目录创建自定义的 odbcinst.ini 文件,内容如下:
[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/home/site/wwwroot/drivers/libmsodbcsql-17.so.8.1
  1. 在 Azure App Service 的「配置-应用程序设置」中添加两个环境变量:
    • ODBCSYSINI=/home/site/wwwroot
    • ODBCINSTINI=odbcinst.ini

方法2:改用容器化部署

使用自定义 Docker 镜像预先安装 ODBC 驱动,彻底绕过沙箱限制。示例 Dockerfile:

FROM python:3.8-slim

# 安装依赖和ODBC驱动
RUN apt-get update && apt-get install -y unixodbc unixodbc-dev curl
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update && ACCEPT_EULA=Y apt-get install -y msodbcsql17

# 部署Flask应用
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .

CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app:app"]

将镜像推送到 Azure Container Registry,再部署到 Azure App Service 即可。

替代连接方案

如果不想折腾 ODBC 驱动,可改用以下纯 Python 驱动:

  • pymssql:纯 Python 实现的 SQL Server 驱动,无需依赖 ODBC,直接通过 pip install pymssql 安装,连接示例:
import pymssql

conn = pymssql.connect(
    server="your-sql-server.database.windows.net",
    user="your-username@your-sql-server",
    password="your-password",
    database="your-db-name"
)
  • SQLAlchemy + pymssql:如果使用 ORM,可配置 SQLAlchemy 使用 pymssql 后端,连接字符串示例:
from sqlalchemy import create_engine

engine = create_engine("mssql+pymssql://username:password@server.database.windows.net/dbname")

关于空的系统级 ODBC 配置文件

Azure App Service Linux 的沙箱环境默认不会初始化 /etc/odbc.ini 和 /etc/odbcinst.ini,且普通用户无权限修改这些文件,因此必须使用自定义的应用级配置文件(如方法1所述)。

内容的提问来源于stack exchange,提问作者Kiet Le

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:15:30