首页 > 解决方案 > 与 Pymssql / Adaptive Server 连接失败(Windows.net 与 Azure.com)

问题描述

我正在尝试使用我以前多次使用过的以下方法连接到新数据库:

import pymssql
server = "servername.database.windows.net"
user = "user"
password = "pwd"
conn = pymssql.connect(server, user, password, "DB")

我收到此错误消息:

MSSQLDatabaseException: (20004, b'DB-Lib error message 20004, severity 9:\nRead from the server failed (servername.database.windows.net:1433)\nNet-Lib error during Connection reset by peer (54)\nDB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (servername.database.windows.net:1433)\nDB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (servername.database.windows.net:1433)\nNet-Lib error during Operation timed out (60)\n')

其他帖子的第一个建议是检查 FreeTDS 的安装。我的 FreeTDS 是最新的,连接到另一台服务器没有问题:“server2.cloudapp.azure.com”。两者都是天蓝色的sqlserver,所以我不确定连接问题可能是什么。为什么会这样?任何帮助表示赞赏。

标签: pythonsql-serverazurepymssql

解决方案


我搜索了很多,并找到了解决方案。

似乎pymssql您直接使用pypi.org中的 pip 安装的模块无法正常使用 PaaS Azure SQL。您需要按照官方教程(为pymssql Python开发配置开发环境)下载具体的whl文件并手动安装。

就我而言,我使用带有 Python 3.7 的 Windows 操作系统,所以我下载了pymssql-2.1.4-cp37-cp37m-win_amd64.whl. cp37对于python 3.7版。win适用于 Windows 操作系统。amd64对于 64 位版本。您需要根据您的环境选择正确的一种。

然后使用pip install {your_whl_file}. 之后,我可以连接到我的 Azure SQL:

import pymssql

server = 'jackdemo.database.windows.net'
database = 'jackdemo'
username = 'jack@jackdemo'
password = '***********'

cnxn = pymssql.connect(server, username, password, database)
cursor = cnxn.cursor()
cursor.execute("select * from Users")
row = cursor.fetchone()
while row:
    print(str(row[0]) + " " + str(row[1]))
    row = cursor.fetchone()

结果:

在此处输入图像描述


顺便说一下,我可能会尝试解释一下为什么您可以使用 *.cloudapp.azure.com 连接到 sql server。根据 URI 路径,它似乎是 Azure VM 的 DNS 名称。如果是这样,pymssql 模块可以与该 VM 上的 sql 服务器配合使用,因为它不是 PaaS Azure SQL。

另一个建议是使用pyodbc. 我看到 Azure SQL 文档中的示例使用它。它可能会减少麻烦。


推荐阅读