pymssql: подключение к базе данных работает только иногда

Я пытаюсь подключиться к серверу Azure SQL с помощью Python pymssql. Проблема в том, что следующий сценарий работает, но только иногда, в других случаях я получаю эту ошибку:

_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()

Мне бы очень помогло, если бы кто-нибудь мог сказать мне, почему этот сценарий выше работает только иногда, а в остальное время я получаю ошибку «Ошибка подключения адаптивного сервера».


person 90abyss    schedule 03.09.2015    source источник


Ответы (1)


Я просмотрел эти ТАК старые темы Не удалось прочитать с сервера при попытке подключиться к sql-azure из tsql и Что такое протокол TDS версии 8.0 и почему я должен его использовать?. Проблема, похоже, вызвана использованием неправильной версии FreeTDS.

Я нашел ключ на странице официального сайта FreeTDS http://www.freetds.org/faq.html#Does.FreeTDS.support.Microsoft.servers.

Есть таблица версий протокола TDS по продукту http://www.freetds.org/userguide/choosingtdsprotocol.htm.

введите описание изображения здесь

FreeTDS будет называть эту версию псевдонимом 7.1 по причинам обратной совместимости, но этого следует избегать из-за проблем совместимости в будущем. См. Примечание ниже об устаревших версиях.

Если вы используете pymssql с FreeTDS в Linux, я думаю, вам нужно проверить файл конфигурации «freetds.conf» по пути / etc / freetds /.

Это моя конфигурация для Azure SQL Server ниже:

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

Вы можете попробовать проверить соединение с сервером SQL Azure, используя инструмент freetds tsql для команды tsql -H <database_name>.database.windows.net -U Username -D DatabaseName -p 1433 -P Password.

Наилучшие пожелания.

person Peter Pan    schedule 07.09.2015
comment
Спасибо за этот ответ, действительно полезный материал. Еще мне помогло использование пула подключений: docs.sqlalchemy.org/en /latest/core/pooling.html - person dmn; 05.06.2017
comment
Есть идеи, почему это не удается только иногда? Я также испытал это, используя адаптер на основе FreeTDS в PHP, где, возможно, 1/50 попыток подключения завершается с этой ошибкой. Это кажется странным, я ожидал, что это либо сработает, либо не сработает, а не этот странный случайный сбой. Это решение, похоже, устранило проблему, поэтому большое спасибо за информацию :-) - person DaveRandom; 08.12.2017