Python连MS SQL正常,Django连时报Named Pipes Provider[53]如何解决?
解决Django连接MS SQL Server失败的问题
看起来你遇到的问题很典型——直接用PyODBC能正常连接,但Django用sql_server.pyodbc引擎就报错,错误提示指向命名管道连接失败和身份验证配置冲突。下面一步步帮你排查解决:
1. 先解决身份验证配置冲突
你的数据库配置里同时写了USER/PASSWORD和Trusted_Connection: 'Yes',这两个是互斥的:
Trusted_Connection='Yes'是用Windows身份验证(当前登录Windows的账号去连接SQL Server)USER/PASSWORD是用SQL Server身份验证
你需要二选一修改配置:
选项A:保留Windows身份验证
删掉USER和PASSWORD字段,配置调整为:
DATABASES = { 'default': { 'ENGINE': 'sql_server.pyodbc', 'NAME': 'djangoBanks', # 注意去掉多余的尖括号<> 'HOST': 'DESKTOP-0FKB14V', 'OPTIONS': { 'driver': "ODBC Driver 17 for SQL Server", 'Trusted_Connection': 'Yes', } } }
选项B:使用SQL Server身份验证
删掉Trusted_Connection字段,同时确保你的SQL Server已开启SQL身份验证,且test账号拥有djangoBanks数据库的访问权限:
DATABASES = { 'default': { 'ENGINE': 'sql_server.pyodbc', 'NAME': 'djangoBanks', 'HOST': 'DESKTOP-0FKB14V', 'USER': 'test', 'PASSWORD': '12345', 'OPTIONS': { 'driver': "ODBC Driver 17 for SQL Server", } } }
2. 强制使用TCP/IP连接(避开命名管道问题)
错误提示里的Named Pipes Provider: Could not open a connection说明Django尝试用命名管道连接失败,而你直接用PyODBC时可能默认用了TCP/IP。可以通过两种方式强制Django切换到TCP/IP:
- 方式一:在
HOST里加上SQL Server默认端口1433:'HOST': 'DESKTOP-0FKB14V,1433' - 方式二:在
OPTIONS里添加'host_is_server': True,强制驱动使用TCP/IP:'OPTIONS': { 'driver': "ODBC Driver 17 for SQL Server", # 新增这一行 'host_is_server': True, # 保留你选择的身份验证配置... }
3. 检查SQL Server基础配置
虽然你直接连接没问题,但Django的连接上下文可能有差异,确认以下几点:
- 确保SQL Server服务正在运行(可以在Windows服务管理器里找到
SQL Server (MSSQLSERVER)或你的具体实例名) - 开启TCP/IP协议:打开SQL Server配置管理器 → 展开SQL Server网络配置 → 选中你的实例的协议 → 确保TCP/IP处于启用状态
- 如果是远程连接(哪怕是同一台机器的远程方式),确认SQL Server允许远程连接:在SSMS里右键服务器 → 属性 → 连接 → 勾选"允许远程连接到此服务器"
4. 测试修改后的配置
修改完配置后,先运行以下命令测试连接是否正常:
python manage.py dbshell
如果能成功进入数据库命令行,说明配置没问题,再启动runserver就应该正常了。
内容的提问来源于stack exchange,提问作者FeoJun
相关产品推荐
相关产品推荐

