Azure sql database Windows上的pymssql可以连接到本地SQL Server,但不能连接到Azure SQL

Azure sql database Windows上的pymssql可以连接到本地SQL Server,但不能连接到Azure SQL,azure-sql-database,pymssql,Azure Sql Database,Pymssql,正在尝试使用pymssql连接到Azure SQL DB(v12), 我能够使用pymssql连接查询并写入本地MSSQL实例 我得到了一个“自适应服务器连接失败”的错误,我的研究似乎指向FreeTDS,但我还没有在我的机器上安装FreeTDS 使用tsql实用程序,我能够连接到Azure SQL实例 为什么我无法使用pymssql进行连接 pymssql连接字符串 import pymssql conn = pymssql.connect(server='<severname>.d

正在尝试使用pymssql连接到Azure SQL DB(v12), 我能够使用pymssql连接查询并写入本地MSSQL实例

我得到了一个“自适应服务器连接失败”的错误,我的研究似乎指向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")
导入pymssql
conn=pymssql.connect(服务器='.database.windows.net',用户='mickey@in4live,密码=“”,数据库='tesdb')
游标=连接游标()
cursor.execute(“选择1”)
输出

conn=pymssql.connect(服务器='.database.windows.net',用户='mickey@',数据库='tesdb') pymssql.connect(pymssql.c:10824)中第641行的文件“pymssql.pyx” pymssql.OperationalError:(20002,'数据库库错误消息20002,严重性9:\n适配器服务器连接失败(:1433)\n'

然而

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

成功连接

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

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

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


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

步骤1:安装Microsoft ODBC驱动程序11、13或13.1:

步骤2:安装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()

让我知道这是怎么回事。

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