Невозможно подключиться к SQL Server через pymssql - PullRequest
9 голосов
/ 11 ноября 2010

Я пытаюсь подключиться к 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 ]

12 голосов
/ 12 ноября 2010

Понял!Я думаю, что источником проблемы было не предоставление Free TDS внимания, в котором она нуждается.Free 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, чтобы убедиться, что я могу читать из базы данных.

Надеюсь, это поможет кому-то еще в будущем.

2 голосов
/ 06 июня 2011

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

0 голосов
/ 11 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...