【问题标题】:pymssql: Connection to the database only works sometimespymssql:与数据库的连接有时才有效
【发布时间】:2015-11-29 13:38:00
【问题描述】:

我正在尝试使用 Python 的 pymssql 连接到 Azure SQL 服务器。问题是以下脚本有效,但仅在某些时候有效,其他时候我收到此错误:

_mssql.MSSQLDatabaseException:(20002,b'DB-Lib 错误消息 20002,严重性 9:\n自适应服务器连接失败\n')

这是我正在使用的脚本:

import pymssql
conn = pymssql.connect(server='x', user='x', password='x', database='x')
cursor = conn.cursor()
cursor.execute('SELECT * FROM customers');
row = cursor.fetchone()
while row:
    print (str(row[0]) + " " + str(row[1]) + " " + str(row[2]))
    row = cursor.fetchone()

如果有人能告诉我为什么上面的脚本只在某些时候有效,而在其余时间我得到“自适应服务器连接失败”错误,那将对我有很大帮助。

【问题讨论】:

    标签: python azure pymssql


    【解决方案1】:

    我查看了这些旧线程 Read from the server failed when trying to connect to sql-azure from tsqlWhat is TDS Protocol Version 8.0 and why should I use it?。 该问题似乎是由于使用了错误的 FreeTDS 版本造成的。

    我在FreeTDS官网http://www.freetds.org/faq.html#Does.FreeTDS.support.Microsoft.servers的页面找到了key。

    有一个按产品http://www.freetds.org/userguide/choosingtdsprotocol.htm 列出的TDS 协议版本表。

    出于向后兼容性的原因,FreeTDS 将此版本别名为 7.1,但由于未来的兼容性问题,应该避免这种情况。请参阅下面关于过时版本的说明。

    如果你在linux上使用带有FreeTDS的pymssql,我认为你需要检查路径/etc/freetds/下的配置文件“freetds.conf”。

    这是我对 Azure SQL Server 的以下配置:

    # A typical Microsoft server
    [egServer70]
            host = <database_name>.database.windows.net
            port = 1433
            tds version = 7.3
    

    您可以尝试使用 freetds 工具“tsql”命令“tsql -H &lt;database_name&gt;.database.windows.net -U Username -D DatabaseName -p 1433 -P Password”来测试与 Azure SQL 服务器的连接。

    最好的问候。

    【讨论】:

    • 感谢您的回答,真的很有帮助。帮助我的另一件事是使用连接池:docs.sqlalchemy.org/en/latest/core/pooling.html
    • 知道为什么“仅有时”会失败吗?我在 PHP 中使用基于 FreeTDS 的适配器也遇到过这种情况,可能 1/50 的连接尝试会因此错误而失败。这看起来很奇怪,我原以为它会工作或不工作,而不是这种奇怪的偶尔失败。不过,此解决方案似乎确实解决了问题,因此非常感谢您提供的信息:-)
    猜你喜欢
    • 1970-01-01
    • 2019-02-23
    • 2015-02-21
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多