Python 学习笔记:Python 连接 SQL Server 报错(20009, b'DB-Lib error message 20009, severity 9)...

问题及场景:

      最近需要使用 Python 将数据写到 SQL Server 数据库,但是在进行数据库连接操作时却报以下错误:(20009, b'DB-Lib error message 20009, severity 9:\nUnable to connect:……)

      由于我的机子上装了两个版本的 SQL Server,即存在多个实例,一开始以为是 server 参数写错了,结果浪费了很多时间,最后发现是其中一个实例的 TCP/IP 协议没有启用 ( ̄_ ̄|||),在这里 mark 以下解决方案。

      Note:关于 Python 是如何连接和操作 SQL Server 数据库的,之后会重新写一篇博客,在此就不作阐述。

      参考博客:https://blog.youkuaiyun.com/qq_18884487/article/details/79816455

 

解决方案:

      ①打开 SQL Server 配置管理器 -> SQL Server 网络配置 -> 选择对应的数据库实例 -> 双击打开 TCP/IP 协议 -> 设置为启用 -> 应用 -> 确定

 

      ②重启该 SQL Server 实例服务:计算机管理 -> 服务与应用 -> 服务 -> 选择对应的 SQL Server 实例 -> 右键重启服务

 

 

      ③重新执行 Python 代码:结果如下,问题解决:

转载于:https://www.cnblogs.com/Sunny20181123/p/10843196.html

### 解决 `pymssql` 连接 Adaptive Server 出现的 `OperationalError 20002` 当遇到 `pymssql.OperationalError: (20002, 'DB-Lib error message 20002, severity 9:\nAdaptive Server connection failed')` 错误时,通常意味着客户端无法成功建立到 SQL Server连接。此问题可能由多种因素引起。 #### 可能的原因 1. **网络配置不当** 如果防火墙设置阻止了必要的端口通信,则可能导致此类错误。即使 IP 地址已在白名单中,仍需确认防火墙允许通过特定端口访问数据库服务器[^4]。 2. **SQL Server 配置不正确** 确认 SQL Server 实例正在监听正确的 IP 和端口号,并且已启用 TCP/IP 协议支持。可以通过 SQL Server Configuration Manager 来验证这些设置[^2]。 3. **TDS 版本兼容性问题** TDS(Tabular Data Stream)协议版本如果不匹配也可能引发该异常。尝试显式指定较低或较高的 TDS 版本来解决问题,例如使用 `'tds_version': '7.0'` 或其他适当值[^3]。 4. **DNS 解析失败** 若主机名解析出现问题也会造成连接超时。建议直接使用 IP 地址代替主机名称来测试连通性[^1]。 5. **认证方式冲突** 检查是否启用了 Windows 身份验证模式还是混合模式。对于某些环境来说,更改身份验证方法可能会有所帮助。 #### Python 示例代码调整 为了更好地处理潜在的问题,在编写 Python 应用程序时可以考虑如下改进: ```python import pymssql try: conn = pymssql.connect( server='your_server_ip', user='your_username', password='your_password', database='your_database_name', port=1433, tds_version='7.0' ) except pymssql.OperationalError as e: print(f"Connection attempt resulted in an operational error: {str(e)}") else: cursor = conn.cursor() # Your queries here... finally: if 'conn' in locals(): conn.close() ``` 上述脚本增加了对端口参数的支持并指定了 TDS 版本号以提高稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值