You need to enable JavaScript to run this app. Python新手用pymssql连接EFSPC14的SQLEXPRESS报20009错误求助
优惠活动
大模型
产品
解决方案
定价
更多

Python新手用pymssql连接EFSPC14的SQLEXPRESS报20009错误求助

pymssql连接本地SQLEXPRESS实例报20009错误的排查方案

触发20009错误的核心原因是pymssql没有正确解析到SQLEXPRESS实例的实际监听地址,和SQL Server本身的服务状态、账号权限无关——SSMS能正常连接,说明服务本身处于正常运行状态。

问题本质说明

SQLEXPRESS属于命名实例,默认不会监听固定的1433端口,而是依赖Windows系统的SQL Browser服务自动告知连接方对应的端口号。SSMS作为官方客户端内置了SQL Browser的交互逻辑,能自动解析实例对应的端口;但pymssql默认不会自动解析带反斜杠的实例名字符串,直接把EFSPC14\SQLEXPRESS当成完整的主机名去解析,最终只会定位到主机EFSPC14,找不到对应实例的TCP监听端口,就会抛出“Adaptive Server不可用”的错误。

可直接落地的修复步骤

  • 先获取SQLEXPRESS的实际监听端口:打开SQL Server配置管理器,定位到SQLEXPRESS实例的网络配置,开启TCP/IP协议,在TCP/IP属性的IP地址栏找到所有IP段对应的TCP端口值。建议清空动态端口的默认配置,手动设置固定端口(比如1433),避免每次重启实例端口变动导致连接失败。
  • 根据获取到的端口值修改连接代码,二选一即可:
    1. 显式指定端口的写法(兼容性最好,不受SQL Browser服务状态影响):
      import pymssql
      mydbb = pymssql.connect(
          server='EFSPC14', # 本机连接也可以直接写'localhost'
          port=1433, # 替换成实际查到的SQLEXPRESS固定端口
          user='sa',
          password='sa123',
          database='PythonAutomation'
      )
      
    2. 按实例名匹配的写法(pymssql 2.1.0以上版本支持):不要把实例名拼在server字段里,单独用instance参数传值,前提是SQL Browser服务处于运行状态、UDP1434端口未被拦截:
      mydbb = pymssql.connect(
          server='EFSPC14',
          instance='SQLEXPRESS',
          user='sa',
          password='sa123',
          database='PythonAutomation'
      )
      
  • 排查防火墙拦截:如果改完代码还是无法连接,临时关闭Windows Defender防火墙测试一次。如果能连通,就在防火墙入站规则中放行Python程序和SQLEXPRESS实例的固定TCP端口即可。
  • 后续验证点:连接通了之后如果出现登录失败的报错,再检查SQLEXPRESS的身份验证模式是否开启了SQL Server混合认证、sa账号是否被禁用、密码是否正确即可。

内容的提问来源于stack exchange,提问作者Tin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 23:45:04