2015-06-23 4 views
0

мой код Python:Невозможно подключиться к MSSQL из Python

import pyodbc 
cnxn = pyodbc.connect('DRIVER=FreeTDS;DSN=S29;UID=test;PWD=test;TDS_Version=8.0;ClientCharset=UTF8') 
cursor = cnxn.cursor() 
cursor.execute("select user_id, user_name from users") 
rows = cursor.fetchall() 
for row in rows: 
    print row.user_id, row.user_name 

Получить сообщение об ошибке:

Traceback (most recent call last): 
File ".../test_mssql_connect.py", line 4, in <module> 
cnxn = pyodbc.connect('DRIVER=FreeTDS;DSN=S29;UID=test;PWD=test;TDS_Version=8.0;ClientCharset=UTF8') 
pyodbc.Error: ('HY000', '[] (20013) (SQLDriverConnect)') 

Я не могу найти информацию, что эта ошибка ('HY000', «[ ] (20013) (SQLDriverConnect) ') и как его исправить.

В то же время через TSQL, Osql и ISQL я успешно подключен к базе

мой odbc.ini

[S29] 
Driver=FreeTDS 
Description=S29 
ServerName=192.168.0.29 
Database=test 
UID=test 
PWD=test 
TDS_Version=8.0 

мой odbcinst.ini

[FreeTDS] 
Description=FreeTDS 
Driver=/usr/local/Cellar/freetds/0.95.1/lib/libtdsodbc.so 
Setup=/usr/local/Cellar/freetds/0.95.1/lib/libtdsodbc.so 
UsageCount=2 
CPTimeout = 
CPReuse = 
TDS Version = 8.0 
client charset = utf-8 

мой freetds.conf

[global] 
tds version = 8.0 
[192.168.0.29] 
host = 192.168.0.29 
port = 1433 
tds version = 8.0 
[S29] 
host = 192.168.0.29 
port = 1433 
tds version = 8.0 
+0

Можете ли вы телнет на сервер IP-адрес SQL из машины вы работаете код на? С терминала (cmd в Windows) попробуйте: 'telnet 192.168.0.29 1433' Если он подключается, вы хорошо. Если он просто говорит в «Подключение ...», вы не можете связаться с удаленным SQL Server. – FlipperPA

+0

Успешно подключается через telnet, причем все тесты с консоли, используя ** tsql, osql ** и ** isql **, также идут хорошо, но соединение не работает с python. На сервере CentOS-соединение из python все работает, но на моей работе Mac никак не работает. – Ruslan

ответ

0

Что ваш freetds.conf настроить? Обратите внимание, что вы, скорее всего, захотите использовать версию TDS версии 7.3, хотя я не думаю, что это проблема, хотя это может быть, так как она по умолчанию соответствует версии TDS версии 7.1. Документация здесь для чисел TDS Версия поддерживаемых FreeTDS:

http://www.freetds.org/userguide/choosingtdsprotocol.htm

Вы, возможно, придется указать номер порта, но не видя ваш freetds.conf DSN установлен, это трудно сказать. Мне повезло без DSN от Python. Поскольку 8,0 не является допустимой версией TDS, я предоставлю вам полный пример, который работает для меня:

freetds.conf:

[examplesql] 
     host = examplesql.server.com 
     port = 1433 
     tds version = 7.3 

odbc.ini:

[examplesql] 
Driver = FreeTDS 
Server = examplesql.server.com 
Port = 1433 
TDS_Version = 7.3 

odbcinst.ini:

[FreeTDS] 
Description = FreeTDS with Protocol up to 7.3 
Driver = /usr/lib64/libtdsodbc.so.0 

pyodbc подключения, DSN бесплатно:

DRIVER={FreeTDS};SERVER=examplesql.server.com;PORT=1433;DATABASE=dbname;UID=dbuser;PWD=dbpassword;TDS_Version=7.3; 

Вам нужно будет изменить odbcinst.ini, чтобы указать, где живет ваш водитель. Несколько замечаний:

  • Вы должны обновить версию TDS, чтобы соответствовать версии SQL Server вы работаете и версии Free TDS вы работаете. Версия 0.95 поддерживает TDS Version 7.3.
  • Версия TDS 7.3 будет работать с MS SQL Server 2008 и выше.
  • Используйте версию TDS 7.2 для MS SQL Server 2005.

Смотрите здесь больше:

https://msdn.microsoft.com/en-us/library/dd339982.aspx

удачи.

+0

Switching versions Бесплатные TDS in ini файлы не дают никаких результатов. Проблема не совсем в этом месте. Поэтому в моих тестах я использовал версию 8.0 – Ruslan

+0

Вот странная проблема, с которой я столкнулся: это ваше имя пользователя или пароль длиной более 25 символов? FreeTDS ограничивает поля до 25 символов, IIRC. Можете ли вы включить полную ошибку, которую вы получаете, или это весь фрагмент выше? – FlipperPA

+0

Пароль такой же, как в примере. Ошибка показана полностью, вот скриншот (http://joxi.ru/52a1PqouRayX20) консоли – Ruslan