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

Docker环境下Django运行inspectdb连接SQL Server失败怎么解决?

问题排查及解决方案

核心原因1:依赖版本不兼容

你当前使用的pyodbc==3.0.10版本过于老旧,和django-mssql-backend==2.8.1存在兼容性问题,该版本的django-mssql-backend要求pyodbc最低版本为4.0.10以上。
解决方法:修改requirements.txt,替换pyodbc版本:

pyodbc>=4.0.30
django-mssql-backend==2.8.1

重新构建Docker镜像生效。

核心原因2:Django生成的连接参数有误

对比你手动拼接的可用连接字符串,Django侧的配置存在2处可优化点:

  1. TDS版本参数格式不标准,且未关闭加密校验:新版SQL Server默认要求加密连接,未配置加密参数会直接被拒绝连接
  2. FreeTDS的端口参数规范是直接拼接在HOST后(格式为HOST,PORT),单独设置PORT字段部分场景下会被驱动识别失败

解决方法:修改settings.py的数据库配置:

DATABASES = {
  'pirineos': {
    'ENGINE': 'sql_server.pyodbc',
    'NAME': DB_PIRINEOS_NAME,
    'USER': DB_PIRINEOS_USER,
    'PASSWORD': DB_PIRINEOS_PASSWORD,
    # 直接把端口拼到HOST后面,删掉单独的PORT字段
    'HOST': f"{DB_PIRINEOS_HOST},{DB_PIRINEOS_PORT}",
    'OPTIONS': {
      'driver': 'FreeTDS',
      'unicode_results': True,
      'driver_supports_utf8' : True,
      # 修正参数大小写,新增加密跳过配置
      'extra_params': 'TDS_Version=8.0;Encrypt=NO;TrustServerCertificate=YES;',
    },
  },
}

辅助排查方法

如果修改后仍无法连接,可进入Docker容器内执行以下命令验证驱动层面的连通性:

# 替换为你实际的数据库地址、端口、用户名、密码
tsql -H <数据库地址> -p <端口> -U <用户名> -P <密码>

如果tsql命令连接失败,说明是FreeTDS驱动或网络层面的问题,优先排查数据库白名单、网络连通性、账号权限。

内容的提问来源于stack exchange,提问作者Alberto Sanmartin Martinez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:09:02