2016-06-20 9 views
1

Я столкнулся с проблемой при попытке получить доступ к базе данных ms-sql с помощью pyobdc.pyodbc не работает на RedHat 5.4. Попытка подключиться к серверу базы данных ms-sql с помощью unixODBC и FreeTDS?

Вот система конфигурации: Python 2.7.11 Pyodbc 3.0.7 RedHat 5.4 (Tikanga) 32 Система Bit Microsoft SQL Server 2012 (Сервер базы данных) UnixODBC 2.3.0

$ tsql -C выход:

Compile-time settings (established with the "configure" script) 
          Version: freetds v0.91 
      freetds.conf directory: /etc 
    MS db-lib source compatibility: yes 
     Sybase binary compatibility: no 
         Thread safety: yes 
         iconv library: yes 
         TDS version: 5.0 
           iODBC: no 
          unixodbc: yes 
       SSPI "trusted" logins: no 
          Kerberos: no 

$ odbcinst -j из говоря:

unixODBC 2.3.0 
DRIVERS............: /usr/local/etc/odbcinst.ini 
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini 
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources 
USER DATA SOURCES..: /root/.odbc.ini 
SQLULEN Size.......: 4 
SQLLEN Size........: 4 
SQLSETPOSIROW Size.: 2 

$ cat /usr/local/etc/odbcinst.ini выход:

[ms-sql] 
Description=TDS connection 
Driver=/usr/local/lib/libtdsodbc.so 
Setup=/usr/local/lib/libtdsodbc.so 
FileUsage=1 
UsageCount=1 

$ cat /usr/local/etc/odbc.ini выход:

[sqlserverdatasource] 
Driver = ms-sql 
Description = ODBC connection via ms-sql 
Trace = No 
Server = >IP Addresss To Database server< 
Port = >Port Number< 
Database = >Database name< 

$ cat /etc/freetds.conf выход:

[sql-server] 
host  = >IP Addresss To Database server< 
port  = >Port Number< 
tds version = 8.0 

Команда, которая дает мне сообщение об ошибке:

connection = pyodbc.connect(r'DRIVER={FreeTDS};SERVER=>IP Addresss To Database server<; PORT=>Port Number<;DATABASE=Database name;UID=Database UID;PWD=DatabasePasswd;') 

Ошибка:

Traceback (most recent call last): File "<stdin>", line 1, in 
<module> pyodbc.Error: ('IM002', '[IM002] [unixODBC][Driver 
Manager]Data source name not found, and no default driver specified 
(0) (SQLDriverConnect)') 

Я пытаюсь решить эту проблему за последние 3 дня. Но еще не повезло. Поэтому любая помощь/предложение будет очень полезной. Я уже прошел через поисковик. Заранее спасибо :)

+0

Ваш ДРАЙВЕР в Python не соответствует ему в 'odbcinst.ini', и вы не указываете версию TDS в строке подключения. Решение включено ниже. – FlipperPA

+0

@FlipperPA: Спасибо за ваш ответ. И извините за опечатки в Driver. Я модифицировал контент только для большинства его и забыл изменить DRIVER = ms-sql. –

ответ

1

Попробуйте что-то вроде этого:

freetds.conf:

[sql-server] 
    host = sql-server.host.com 
    port = 1433 
    tds version = 7.2 

odbc.ini:

[sql-server] 
    Driver = FreeTDS 
    Server = sql-server.host.com 
    Port = 1433 
    TDS_Version = 7.2 

odbcinst.ini:

[FreeTDS] 
    Description = v0.91 with protocol v7.2 
    Driver = /usr/local/lib/libtdsodbc.so 

В Python:

connection = pyodbc.connect(r'DRIVER={FreeTDS};SERVER=sql-server.host.com;PORT=1433;DATABASE=Database name;UID=Database Username;PWD=DatabasePasswd;TDS_Version=7.2') 

TDS версии 8.0 не существует. 7.2 является самым высоким, поддерживаемым в FreeTDS 0.91.Смотрите здесь, чтобы объяснить путаницу: http://www.freetds.org/userguide/choosingtdsprotocol.htm

Если вы все еще возникают проблемы, попробуйте протестировать с tsql и isql испытать FreeTDS и UnixODBC слои стека соединения соответственно. Удачи!

+0

Большое вам спасибо :) Из-за вашей помощи я спас еще пару дней. Выше ответ работает с ** TDS_Version = 8.0 **. –

+0

Отлично! Вы можете пометить ответ правильно с помощью флажка? Кроме того, если вы проверите ссылку, вы не захотите использовать 8.0. Пока это будет работать, в будущих версиях FreeTDS этого не будет. Если вы хотите в будущем доказательство, вы захотите использовать 7.2. :) – FlipperPA