pymssql в Windows может подключаться к локальному SQL Server, но не к Azure SQL

Пытаясь подключиться к базе данных Azure SQL (v12) с помощью pymssql, я могу подключить запрос и записать в свой локальный экземпляр MSSQL с помощью pymssql.

Я получаю сообщение об ошибке «Ошибка подключения адаптивного сервера», и мое исследование, похоже, указывает на 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.pyx», строка 641, в pymssql.connect (pymssql.c: 10824 ) pymssql.OperationalError: (20002, 'Сообщение об ошибке DB-Lib 20002, уровень серьезности 9: \ nСбой подключения адаптивного сервера (: 1433) \ n'

тем не мение

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

Успешно подключается


person Glitch    schedule 19.08.2016    source источник
comment
Фактически, вы используете FreeTDS. pymssql - это простой интерфейс базы данных для Python, основанный на FreeTDS (см. здесь) .   -  person Gord Thompson    schedule 19.08.2016
comment
Горд, из того, что я прочитал, FreeTDS не поставляется в комплекте с pymssql, он устанавливается отдельно. Я не установил его, я не понимаю, как я могу его использовать   -  person Glitch    schedule 19.08.2016
comment
Насколько я понимаю, сборки pymssql для Windows по умолчанию, которые будут установлены с использованием pip install pymssql (за исключением pymssql версии 2.1.2, которая оказалась аномалия) статически связаны с FreeTDS и поэтому включают необходимые компоненты FreeTDS как неотъемлемую часть установки pymssql. (Я считаю, что они скомпилированы в _mssql.pyd.)   -  person Gord Thompson    schedule 19.08.2016
comment
Отлично, у меня действительно установлена ​​версия 2.1.3, поэтому, если FreeTDS может подключиться к моему локальному экземпляру MSSQL, что мне изменить, чтобы он нашел экземпляр Azure? Большая часть документации указывает на /etc/freetds.conf, которого у меня нет в моей настройке.   -  person Glitch    schedule 19.08.2016
comment
Дело в том, что статически связанные сборки pymssql по умолчанию не включают поддержку SSL-соединений, а для Azure, вероятно, требуется зашифрованное соединение. Возможно, вам потребуется удалить текущий pymssql, а затем сделать что-то вроде this, ссылка на который я нашел здесь.   -  person Gord Thompson    schedule 19.08.2016
comment
Kewl .. Попытается это сделать и вернется   -  person Glitch    schedule 19.08.2016
comment
Поэтому я решил отказаться от конфигурации Windows, установить это на моем компьютере с CentOS, установить freeTDS, затем pymssql, изменить несколько параметров в файле freetds.conf (хост). и мне было хорошо идти.   -  person Glitch    schedule 20.08.2016


Ответы (2)


Сборки pymssql для Windows по умолчанию, которые устанавливаются с использованием pip install pymssql, статически связаны с FreeTDS, поэтому двоичные файлы pymssql (. pyd files) включают необходимые компоненты FreeTDS для установления незашифрованных соединений. . Этого достаточно для подключения ко многим (большинству?) Локальным установкам SQL Server, где безопасные подключения не требуются.

Однако для всех подключений к базе данных SQL Azure требуется шифрование (см. здесь), поэтому простой pip install pymssql в Windows не сможет подключиться к базе данных Azure SQL. Вместо этого нам нужно установить pymssql с поддержкой SSL, как описано в следующей статье MSDN.

Шаг 1. Настройте среду разработки для pymssql Python

где «Шаг 1» относится к первому шагу в руководстве Microsoft по Azure.

Подключение к базе данных SQL с помощью Python

person Gord Thompson    schedule 20.08.2016

@Wasky, я также рекомендую вам использовать pyodbc вместо pymssql. В последней версии pymssql для Windows есть некоторые проблемы с ssl, которые вызывают проблемы с привязкой ssl.

Шаг 1. Установите драйвер Microsoft ODBC 11, 13 или 13.1: https://www.microsoft.com/en-us/download/details.aspx?id=50420

Шаг 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()

Сообщите мне, как это происходит.

person meet-bhagdev    schedule 23.08.2016