使用Python3.11的Azure Function中ODBC Driver18未找到问题求助
解决Azure Function(Linux计划)连接Azure SQL时ODBC Driver 18缺失问题
问题根源
Azure Function Linux环境的基础镜像默认未预装SQL Server ODBC驱动,pyodbc作为Python库依赖系统级驱动文件才能建立数据库连接,这是报错的核心原因。另外注意你的报错信息中驱动名称后有多余空格('ODBC Driver 18 for SQL Server '),这也会导致驱动查找失败,需先修正连接字符串里的驱动名格式。
可行解决方案
方案1:Post-Deployment脚本自动安装驱动(适用于Consumption/Elastic Premium计划)
在Function App根目录创建post_deployment.sh脚本,内容如下:
#!/bin/bash # 安装依赖工具 apt-get update && apt-get install -y curl apt-transport-https # 添加微软官方APT源 curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list # 静默安装ODBC Driver 18 apt-get update && ACCEPT_EULA=Y apt-get install -y msodbcsql18 # 安装unixODBC开发包(部分场景下pyodbc编译需要) apt-get install -y unixodbc-dev
然后在Function App的配置 > 应用程序设置中,添加新设置:
- 名称:
POST_DEPLOYMENT_SCRIPT_PATH - 值:
post_deployment.sh
每次部署完成后,平台会自动执行该脚本安装驱动。
方案2:自定义Docker镜像(适用于Premium/Dedicated计划)
如果你的Function运行在Premium或专属(App Service)计划,可以构建包含驱动的自定义镜像:
- 创建
Dockerfile:
# 基于官方Azure Function Python 3.11镜像 FROM mcr.microsoft.com/azure-functions/python:4-python3.11 # 设置自动接受EULA ENV ACCEPT_EULA=Y # 安装ODBC Driver 18及依赖 RUN apt-get update && apt-get install -y curl apt-transport-https \ && curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \ && curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list \ && apt-get update && apt-get install -y msodbcsql18 unixodbc-dev # 复制Function代码和依赖文件 COPY . /home/site/wwwroot RUN cd /home/site/wwwroot && pip install -r requirements.txt
- 将镜像构建并推送至Azure容器注册表(ACR),再配置Function App使用该镜像运行。
验证驱动安装
可以添加一段简单代码确认驱动是否可用:
import pyodbc def main(req): # 打印可用驱动 available_drivers = pyodbc.drivers() print(f"已安装ODBC驱动:{available_drivers}") # 正常输出应包含"ODBC Driver 18 for SQL Server"
内容的提问来源于stack exchange,提问作者Mawati
相关产品推荐
相关产品推荐

