【问题标题】:pymssql on Windows can connect to local SQL Server but not to Azure SQLWindows 上的 pymssql 可以连接到本地 SQL Server,但不能连接到 Azure SQL
【发布时间】:2016-12-26 16:52:21
【问题描述】:

尝试使用 pymssql 连接到 Azure SQL DB (v12), 我可以使用 pymssql 连接查询并写入本地 MSSQL 实例。

我收到“Adaptive Server connection failed”失败错误,我的研究似乎指向 FreeTDS,但我的机器上没有安装 FreeTDS。

使用 tsql 实用程序,我可以连接到 Azure SQL 实例

为什么我使用 pymssql 连接失败?

pymssql 连接字符串

import pymssql
conn = pymssql.connect(server='<severname>.database.windows.net',user='mickey@in4live', password='<pass>', database='tesdb')
cursor = conn.cursor()
cursor.execute("select 1")

输出

conn = pymssql.connect(server='.database.windows.net',user='mickey@', database='tesdb') pymssql.connect (pymssql.c:10824) 中的文件“pymssql.pyx”,第 641 行 pymssql.OperationalError: (20002, 'DB-Lib 错误消息 20002, 严重性 9:\n自适应服务器连接失败 (:1433)\n'

然而

tsql -H <servername>.database.windows.net -p 1433 -U mickey@<servername> -P <pass>

连接成功

【问题讨论】:

  • 实际上,您正在使用 FreeTDS。 pymssql 是“建立在 FreeTDS 之上的 Python 简单数据库接口”(参考:here)。
  • 戈德,根据我的阅读,FreeTDS 没有与 pymssql 捆绑在一起,它是单独安装的。我还没有安装它,我对如何使用它感到困惑
  • 我的理解是,将使用pip install pymssql 安装的 pymssql 的默认 Windows 版本(pymssql 版本 2.1.2 除外,结果是an anomaly)静态链接到 FreeTDS 和因此,将所需的 FreeTDS 组件作为 pymssql 安装的一个组成部分包括在内。 (我相信它们被编译成“_mssql.pyd”。)
  • 太好了,我实际上已经安装了 2.1.3,所以如果 FreeTDS 可以连接到我的本地 MSSQL 实例,我应该改变什么让它找到 azure 实例?大多数文档都指向 /etc/freetds.conf,我的设置中没有。
  • 问题是 pymssql 的默认“静态链接”构建不包括对 SSL 连接的支持,Azure 可能需要加密连接。您可能需要卸载当前的 pymssql,然后执行this 之类的操作,我找到了here 的链接。

标签: azure-sql-database pymssql


【解决方案1】:

使用pip install pymssql 安装的 pymssql 默认 Windows 版本静态链接到 FreeTDS,因此 pymssql 二进制文件 (.pyd files) 包含建立未加密 连接。这足以连接到不需要安全连接的许多(大多数?)本地 SQL Server 安装。

但是,与 Azure SQL 数据库的所有连接都需要加密(参考:here),因此 Windows 上的基本 pip install pymssql 将无法连接到 Azure SQL 数据库。相反,我们需要安装支持 SSL 的 pymssql,如以下 MSDN 文章中所述

Step 1: Configure development environment for pymssql Python development

其中“步骤 1”是指 Microsoft Azure 教程中的第一步

Connect to SQL Database by using Python

【讨论】:

  • 如何验证安装的pymssql是否支持SSL?@Gord
【解决方案2】:

@Wasky,我还建议您使用 pyodbc 而不是 pymssql。 Windows 上最新版本的 pymssql 存在一些导致 ssl 链接问题的 ssl 问题。

第 1 步:安装 Microsoft ODBC 驱动程序 11、13 或 13.1:https://www.microsoft.com/en-us/download/details.aspx?id=50420

第二步:安装pyodbc

> cd C:\Python27\Scripts>  
> pip install pyodbc 

第 3 步:运行您的示例

import pyodbc 
server = 'tcp:myserver.database.windows.net' 
database = 'mydb' 
username = 'myusername' 
password = 'mypassword' 
cnxn = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()

让我知道这是怎么回事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 2011-07-28
    相关资源
    最近更新 更多