Не удается подключиться к SQL Server через pymssql

Я пытаюсь подключиться к SQL Server, работающему в системе Windows XP, из системы *nix на локальном сервере через pymssql. Однако соединение не удается, как показано ниже

db = pymssql.connect(host='192.168.1.102',user='www',password='test',database='TestDB')
Traceback (most recent call last):

File "<stdin>", line 1, in <module>
File "pymssql.pyx", line 457, in pymssql.connect (pymssql.c:6041)
raise InterfaceError(e[0])
pymssql.InterfaceError: Connection to the database failed for an unknown reason.

вещи, которые я пробовал:

  1. установите SQL Server и браузер для запуска в качестве сетевого сервера.
  2. настройка пользователя "www". Я также тестировал этого пользователя локально в SQL Studio.
  3. отключить Брандмауэр Windows (временно конечно).

мне не хватает Что - то ... я просто не знаю, что это. Я попробовал все бесконечные параметры меню В Windows безрезультатно. Я заметил, что если Брандмауэр Windows включен (я устанавливаю исключение для SQL Server), python делает длительную паузу, а затем выдает ошибку. Если брандмауэр выключен, ошибка будет мгновенной.

есть ли журналы, которые я могу посмотреть в SQL Server?

3 ответов


понял! Я думаю, что источником проблемы было не предоставление бесплатного TDS необходимого внимания. Бесплатный TDS, по-видимому, является драйвером pymssql и обеспечивает подключение к другим базам данных - SQL Server является одним из них.

В freetds.файл conf находится в /usr / local / etc в моей системе (Mac Book Pro).

этот файл содержит значения по умолчанию из установки. Однако я ранее добавил определение, чтобы я мог подключиться, но забыл об этом и к сожалению, не записал.

во всяком случае, вот пример того, что я добавил к freetds.conf:

[SomeDB]
    host = 192.168.1.102
    port = 1219
    tds version = 7.0

однако, что озадачивает, так это то, что я установил порт на 1219. Я установил его вручную в 1433 в SQL Studio. Кроме того, я использую TDS версии 0.82, поэтому я не знаю, как 7.0 вписывается.

затем я протестировал подключение с помощью "tsql" следующим образом:

tsql -S SomeDB -U www

Я ввожу пароль и получаю командную строку, которая позволяет SQL запросы.

затем я протестировал подключение с помощью pymssql следующим образом:

db = pymssql.connect(host='SomeDB',user='www',password='cylon',database='TestDB')

как вы можете видеть, мне нужно было использовать имя хоста из freetds.conf файл, а не IP напрямую. Затем я протестировал простой запрос с дополнительным кодом python, чтобы я мог читать из базы данных.

Я надеюсь, что это помогает кто-то еще в будущем.


похоже, у вас есть это решение, но для кого-либо еще из google, который приземляется здесь: проверьте, чтобы убедиться, что на вашем MS SQL Server включена авторизация в смешанном режиме. Он по умолчанию разрешает только авторизацию Windows, и это вызовет эту ошибку в pymssql.


Это окна машины U работаешь? укажите порт 1433. кажется, это ошибка в клиентском api mssql, который пытается использовать Namedpipes вместо TCP / IP.