2016-06-20 3 views
1

Ich habe Probleme beim Zugriff auf MS-SQL-Datenbank mit pyobdc. Hierpyodbc funktioniert nicht auf RedHat 5.4. Versuchen Sie, sich mit dem Datenbankserver ms-sql mittels unixODBC und FreeTDS zu verbinden?

ist der System-config: Python 2.7.11 Pyodbc 3.0.7 RedHat 5.4 (Tikanga) 32 Bit System Microsoft SQL Server 2012 (Datenbankserver) unixODBC 2.3.0

$ tsql -C Ausgabe:

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 out setzen:

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 Ausgang:

[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 Ausgang:

[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 Ausgabe:

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

Befehl, die mir Fehler geben:

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

Fehler:

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)') 

Ich versuche, dieses Problem für letzte 3 Tage zu lösen. Aber noch kein Glück. Also jede Hilfe/Anregung wäre sehr hilfreich. Ich bin schon googeln gegangen. Vielen Dank im Voraus :)

+0

Ihr DRIVER in Python stimmt nicht mit 'odbcinst.ini' überein und Sie geben in der Verbindungszeichenfolge keine TDS-Version an. Lösung ist unten enthalten. – FlipperPA

+0

@FlipperPA: Danke für deine Antwort. Und Entschuldigung für die Tippfehler bei Driver. Ich änderte den Inhalt einfach zu den meisten und vergaß, den DRIVER = ms-sql zu ändern. –

Antwort

1

so etwas wie dieses Versuchen:

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 

In 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 Version 8.0 ist nicht vorhanden. 7,2 ist die höchste Unterstützung in FreeTDS 0,91.Sehen Sie hier zu erklären, die Verwirrung: http://www.freetds.org/userguide/choosingtdsprotocol.htm

Wenn Sie immer noch Probleme haben, versuchen Sie mit tsql und isql Prüfung jeweils die FreeTDS und unixODBC Schichten des Verbindungsstapel zu testen. Viel Glück!

+0

Vielen Dank :) Dank Ihrer Hilfe habe ich noch ein paar Tage gerettet. Die obige Antwort funktioniert mit ** TDS_Version = 8.0 **. –

+0

Großartig! Können Sie die Antwort mit der Checkbox als richtig markieren? Wenn Sie den Link überprüfen, möchten Sie 8.0 nicht verwenden. Während es für jetzt funktioniert, wird es nicht in zukünftigen Versionen von FreeTDS. Wenn Sie zukunftssicher sein möchten, sollten Sie 7.2 verwenden. :) – FlipperPA

Verwandte Themen