Не удается подключиться к базе данных mssql с помощью pymssql

У меня FreeTDS установлен и настроен правильно. Мой файл freetds.conf, добавленный в конец:

[myserver]
    host = myserver
    port = 1433
    tds version = 7.0

И я могу выполнить следующую команду, чтобы получить приглашение SQL:

tsql -S myserver -U username

Мой скрипт на Python чрезвычайно минимален, пытаясь успешно подключиться к базе данных:

#! /path/to/python/bins

import pymsql
conn = pymssql.connect(host='myserver', user='username', password='password', database='database', as_dict=True)
conn.close()

Но когда я запускаю его, я получаю следующую ошибку:

Traceback (most recent call last):
  File "./test.py", line 5, in <module>
    conn = pymssql.connect(host='myserver', user='username', password='password', database='database', as_dict=True)
  File "pymssql.pyx", line 456, in pymssql.connect (pymssql.c:6017)
pymssql.InterfaceError: Connection to the database failed for an unknown reason.

Что может быть причиной этого? Из того, что я искал, у большинства людей, которые сталкиваются с этой проблемой, неправильно настроен файл freetds.conf; однако я могу успешно подключиться (с помощью tsql). Кто-нибудь знает, что я делаю неправильно, или как я могу это исправить?


person EGr    schedule 15.07.2013    source источник


Ответы (1)


Я только что просмотрел код pymssql и, скорее всего, у вас проблема с драйвером MSSQL. https://code.google.com/p/pymssql/source/browse/pymssql.pyx?name=1.9.908#456

Попробуйте настроить ведение журнала в FreeTDS, чтобы увидеть «неизвестную причину»: см. http://freetds.schemamania.org/userguide/logging.htm (зеркало)

В принципе:

$ export TDSDUMP=/tmp/freetds.log
person twil    schedule 17.07.2013
comment
Похоже, он не пытается подключиться к порту, который я указал в файле freetds.conf: net.c:210:Connecting to <server-ip> port 4000 (TDS version 5.0) - person EGr; 18.07.2013
comment
Я нашел один способ установить соединение (хотя теперь я получаю другие ошибки); Мне просто нужно указать порт в коде Python. Итак, где у меня есть host=myserver, у меня будет host=myserver:port. Хотя не все мои проблемы решены, проблема, о которой я спрашивал, решена. Спасибо! - person EGr; 18.07.2013
comment
Я также должен отметить, что мне пришлось создать следующую переменную env: TDSVER=8.0 - person EGr; 22.07.2013