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

问题描述 投票:0回答:2

我们有一个使用 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: 来自服务器的意外 EOF (xx.xx.xx.xx:1433) DB-Lib 错误消息 20002,严重性 9: Adaptive Server 连接失败 (xx.xx.xx.xx:1433) ')

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

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

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

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

sql-server python-3.x flask pymssql
2个回答
3
投票

好吧,我们的答案是切换到 pyodbc。一些实用函数或多或少使它成为剪切和粘贴的过程,但这里那里存在一些问题,但 pymssql 在过去几年中越来越难以构建、升级和使用。


0
投票

我有同样的错误20017并且尝试了很多,但最后参数tds_version解决了我的问题。 DBeaver 显示我的数据库 tds_version = 8.0,但我必须使用 7.0 才能正常工作。没有线索,也许有人帮忙,祝你好运。

    args = {
        "server": _env_var["SERVER"],
        "user": _env_var["USER"],
        "password": _env_var["PASSWORD"],
        "database": _env_var["DATABASE"],
        "tds_version": "7.0"
    }

    conn = pymssql.connect(**args)
© www.soinside.com 2019 - 2024. All rights reserved.