Azure部署Flask应用用load_dotenv连Azure SQL出现pyodbc超时错误
排查步骤及解决方案
1. 核心问题:.env文件未同步到部署环境
你将.env加入.gitignore后,该文件不会被提交到代码库,也不会被打包进Azure部署包/Docker镜像中,生产环境不存在.env文件,所有os.getenv()调用都会返回None,拼接出的连接字符串缺少必填参数,直接导致连接超时。
解决方法:
不要将敏感配置放在.env中部署到生产环境,直接在Azure应用服务的「配置」->「应用设置」中添加以下4个环境变量:
- SERVER
- DB_NAME
- DB_USER
- PASSWORD
Azure会自动将这些配置注入到应用运行环境中,os.getenv()可直接读取,无需依赖.env文件。
2. 检查load_dotenv()调用缺失
如果本地运行时依赖IDE或终端自动加载了.env变量,但代码中未显式声明加载逻辑,会导致部署环境无法读取到变量。
解决方法:
在main.py文件最开头添加如下代码:
from dotenv import load_dotenv # 加载.env文件,生产环境无该文件时也不会抛出异常 load_dotenv()
该调用仅在本地开发时生效,生产环境会优先读取系统注入的环境变量,不会冲突。
3. 连接字符串格式校验
你使用textwrap.dedent拼接字符串时,可能产生多余的换行或空格导致连接字符串格式错误。可在本地开发时打印拼接后的连接字符串,确认各参数符合ODBC要求的格式,无多余不可见字符。
4. 辅助排查项
如果上述配置都正确,可确认Azure SQL的防火墙设置中已开启「允许Azure服务和资源访问此服务器」开关,避免网络访问被拦截。
内容的提问来源于stack exchange,提问作者ZaraThoustra
相关产品推荐
相关产品推荐

