Django 1.11.3无法连接Microsoft SQL Server问题求助
解决Django 1.11.3连接Microsoft SQL Server的OperationalError问题
咱们一步步来排查这个连接问题,从最基础的环节开始,先排除底层的问题,再看Django配置:
第一步:先测试FreeTDS的直接连通性
先跳过Django,直接用FreeTDS自带的tsql工具测试连接,这能帮我们快速定位是ODBC层的问题还是Django配置的问题:
- 打开终端,替换成你的实际参数后运行:
tsql -H <host-id> -p 1433 -U <USER> -P <password> - 如果连接成功,你会看到
1>的提示符,输入quit就能退出;如果失败,说明问题出在FreeTDS安装、网络或者SQL Server本身,和Django无关。
第二步:匹配TDS版本与SQL Server版本
这是最容易踩的坑之一:不同版本的SQL Server需要对应特定的TDS版本,不匹配就会连不上。先确认你的SQL Server版本对应的TDS版本:
- SQL Server 2008/2008 R2 → TDS 7.1
- SQL Server 2012/2014 → TDS 7.2
- SQL Server 2016及以上 → TDS 7.3
- 然后更新Django的
settings.py配置,补上端口和TDS版本参数:DATABASES = { 'mssql': { 'ENGINE':'sql_server.pyodbc', 'NAME': '<NAME>', 'USER': '<USER>', 'PASSWORD':'<password>', 'HOST':'<host-id>', 'PORT': '1433', # SQL Server默认端口,如果是自定义端口请修改 'OPTIONS': { 'driver':'FreeTDS', 'tds_version': '7.3', # 替换成你对应的TDS版本 'unicode_results': True, # 提前避免中文乱码问题 } } }
第三步:确认ODBC驱动路径正确
检查你的odbcinst.ini里的Driver路径是否真的存在:
- 运行命令验证:
ls /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so - 如果返回“No such file or directory”,说明FreeTDS的安装路径不对,常见的替代路径有
/usr/lib/libtdsodbc.so或/usr/local/lib/libtdsodbc.so,找到正确路径后更新odbcinst.ini即可。
第四步:排查网络与防火墙拦截
如果前面的tsql测试失败,大概率是网络问题:
- 先测试服务器是否能ping通:
ping <host-id> - 再测试1433端口是否开放:
如果telnet连不上,要么是SQL Server所在服务器的防火墙没开放1433端口,要么是你的机器到服务器的网络有拦截,需要联系运维人员调整。telnet <host-id> 1433
额外注意点
- 确保
pyodbc版本和Django 1.11兼容:Django 1.11推荐使用pyodbc 3.x版本(比如3.0.10),过高版本可能出现兼容性问题,可以用pip install pyodbc==3.0.10指定安装。 - 如果你的SQL Server用了非默认端口,一定要把
PORT参数改成对应的端口号。
内容的提问来源于stack exchange,提问作者alien
相关产品推荐
相关产品推荐

