Mac下Django连接SQL Server遇ODBC Driver 17登录超时错误求助
排查「ODBC Driver 17 for SQL Server Login timeout expired (0)」错误的步骤
一、验证网络连通性
- 在Mac终端执行
nc -zv <你的DB_SERVER> 1433,检查服务器端口是否可达:- 如果连接失败,优先排查SQL Server所在服务器的防火墙/安全组是否开放1433端口
- 确认
DB_SERVER地址是否正确(公网IP、内网IP或域名是否无误) - 若为本地虚拟机/容器运行的SQL Server,检查端口映射是否配置正确
二、测试pyodbc直接连接
跳过Django,用pyodbc直接验证驱动和连接参数:
import pyodbc conn_str = ( "DRIVER={ODBC Driver 17 for SQL Server};" "SERVER=<你的DB_SERVER>,1433;" "DATABASE=<你的DB_NAME>;" "UID=<你的DB_USER>;" "PWD=<你的DB_PASSWORD>" ) try: conn = pyodbc.connect(conn_str) print("连接成功") conn.close() except Exception as e: print(f"连接失败:{e}")
- 若此测试也超时,问题出在驱动、网络或SQL Server配置,而非Django
- 若测试成功,再聚焦Django配置问题
三、检查Django数据库配置细节
- 验证环境变量是否正确加载:终端执行
echo $DB_NAME、echo $DB_SERVER,确认输出符合预期 - 暂时替换环境变量为硬编码的真实值,测试
migrate,排除环境变量加载失败的可能:DATABASES = { "default": { 'ENGINE': 'mssql', 'NAME': 'mytestdb', 'HOST': '<真实服务器地址>', 'PORT': 1433, 'USER': '<真实用户名>', 'PASSWORD': '<真实密码>', 'Trusted_Connection': 'no', 'OPTIONS': { 'driver': 'ODBC Driver 17 for SQL Server', 'isolation_level':'READ UNCOMMITTED', }, } } - 若使用SQL Server命名实例,需确认实例端口(非默认1433时需修改
PORT值),或把HOST格式改为<服务器名>,<实例端口>
四、Mac ODBC驱动检查
- 终端执行
odbcinst -j,查看输出的ODBC Drivers列表中是否存在ODBC Driver 17 for SQL Server - 若驱动存在但无效,尝试卸载重装ODBC Driver 17,或升级至ODBC Driver 18测试
内容的提问来源于stack exchange,提问作者Angret Hua
相关产品推荐
相关产品推荐

