升级到 Python 3.6 和 SQL Server 2016 后出现 Pymssql 错误 20017

Posted

技术标签:

【中文标题】升级到 Python 3.6 和 SQL Server 2016 后出现 Pymssql 错误 20017【英文标题】:Pymssql Error 20017 after upgrading to Python 3.6 and SQL Server 2016 【发布时间】:2017-09-25 16:32:41 【问题描述】:

我们有一个使用 pymssql 的 Flask 应用程序在 Python 2.7 和 SQL Server 2012 下运行了 1.5 年。我们将该应用程序移至一组新的服务器,并将 Flask 应用程序升级到 Python 3.6,并将新的数据库服务器升级到 SQL Server 2016. 它们都是 Windows 服务器。

从那时起,我们就遇到了 20017 年的间歇性错误:

pymssql.OperationalError(20017, b'DB-Lib 错误消息 20017,严重性 9:\n来自服务器的意外 EOF (xx.xx.xx.xx:1433)\nDB-Lib 错误消息 20002,严重性 9:\ n自适应服务器连接失败 (xx.xx.xx.xx:1433)\n')

只有一小部分的调用会返回这个,但足以引起问题。我可以提供我们正在运行的所有内容的特定版本。

提出的一种解决方案是切换到 pyodbc,但我们有数百个查询和存储过程调用,其中许多带有 UUID,而 pyodbc 处理起来几乎不如 pymssql 干净。

我已经通过预编译的*** (pymssql-2.1.3-cp36-cp36m-win_amd64) 安装了 pymssql,因为 pip 如果没有旧版本就无法构建它。

任何有关调试或修复此问题的想法都会有所帮助。

【问题讨论】:

【参考方案1】:

好吧,我们的答案是切换到 pyodbc。一些实用程序功能使其或多或少地成为一种剪切和粘贴,到处都有一些陷阱,但 pymssql 在过去几年中越来越难以构建、升级和使用。

【讨论】:

以上是关于升级到 Python 3.6 和 SQL Server 2016 后出现 Pymssql 错误 20017的主要内容,如果未能解决你的问题,请参考以下文章

mac python2.7.10 升级到 3.6

ubuntu16.04LTS服务器,python2.7升级到3.6,且同时升级pip

如何使用 conda 升级到 Python 3.6?

基于CentOS7环境的Python从3.6升级到3.8及部署Tensorflow2的过程笔记

基于CentOS7环境的Python从3.6升级到3.8及部署Tensorflow2的过程笔记

Python升级3.6 强力Django+杀手级Xadmin打造在线教育平台