Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server, Python und OS X

Zusammenfassung

Ich verwende einen Mac auf Yosemite Version 10.10.1 und versuche, eine Verbindung zu einer MS SQL Server-Datenbank herzustellen. Ich habe gesucht und konnte keine aktualisierte detaillierte Antwort finden, also ist hier eine Beschreibung, die hauptsächlich aus diesem erstaunlichen Artikel stammt hier . Ich füge es auf Stackoverflow hinzu, falls der Link stirbt. Die Idee ist, dass wir die folgenden Schichten einrichten/verbinden müssen.

Ebenen

  • TEIL 1 - Pyodbc
  • TEIL 2 - freeTDS (kann mit tsql überprüft werden)
  • TEIL 3 - unixODBC (kann mit isql überprüft werden)
  • TEIL 4 – MS SQL (kann mit einem regulären Python-Programm überprüft werden)

Schritte

  1. Installieren Sie Homebrew von hier - Dies ist ein Paketmanager für Mac OSX. Der Artikel zeigt, wie man einen anderen Paketmanager „MacPorts“ verwendet. Für meine Anweisungen sind sie mit Homebrew. Grundsätzlich hat Homebrew einen Ordner 'cellar', der verschiedene Versionen von Paketen enthält. Anstatt Ihre normalen Dateien zu modifizieren, zeigt es stattdessen auf diese Homebrew-Pakete.

  2. Wir müssen Pyodbc installieren, aber Pyodbc verwendet standardmäßig iODBC-Treiber (die mit Mac installiert werden), aber viele Leute haben Probleme, damit es funktioniert. Wir werden also eine Alternative namens unixodbc verwenden , die wir in Zukunft installieren würden. Im Moment müssen wir die pyodbc-Installation so konfigurieren, dass sie mit unixodbc funktioniert.

Gehen Sie zu PyPi und laden Sie den Pyodbc-Tarball herunter und dekomprimieren Sie ihn. Ändern Sie dann diese Zeilen in setup.py :

elif sys.platform == 'darwin':
        # OS/X now ships with iODBC.
        settings['libraries'].append('iodbc')

zu:

elif sys.platform == 'darwin':
        # OS/X now ships with iODBC.
        settings['libraries'].append('odbc')

und führen Sie nun python setup.py install aus .

Dadurch verwendet unsere Pyodbc-Installation standardmäßig Unixodbc-Treiber. Perfekt!

  1. FreeTDS installieren mit brew install freetds --with-unixodbc (FreeTDS ist der Treiber, der zwischen Mac ODBC und MS SQL Server sitzt, dies Das Diagramm hier zeigt, welche Version von TDS Sie basierend auf Ihrer spezifischen Microsoft Server-Version verwenden sollten; z.B. tds-Protokoll 7.2 für Microsoft SQL Server 2008).

  2. Konfigurieren Sie freetds.conf Datei (Die Datei sollte sich in '/usr/local/etc/freetds.conf' befinden, was für Homebrew ein Link zu '/usr/local/Cellar/freetds/0.91_2/etc' ist, aber Ihre könnte woanders sein je nach Ausführung). Ich habe das Global bearbeitet und meine Datenbankinformationen am Ende hinzugefügt (aus irgendeinem Grund würde 'tds version =7.2' einen Fehler auslösen, aber immer noch funktionieren, während 8.0 nur funktioniert):

    [global]
    # TDS protocol version
    tds version = 8.0
    
    [MYSERVER]
    host = MYSERVER
    port = 1433
    tds version = 8.0
    
  3. Vergewissern Sie sich, dass FreeTDS installiert ist korrekt mit:tsql -S myserver -U myuser -P mypassword (Sie sollten eine Eingabeaufforderung wie diese sehen, wenn es funktioniert hat)

    locale is "en_US.UTF-8"
    locale charset is "UTF-8"
    using default charset "UTF-8"
    1>
    
  4. Installieren Sie unixODBC mit brew install unixodbc .

  5. Richten Sie Ihre unixODBC-Konfigurationsdateien ein , die odbcinst.ini enthält (Treiberkonfiguration) und odbc.ini (DSN-Konfigurationsdatei). Standardmäßig befanden sich meine Dateien in:/Library/ODBC (Hinweis:NICHT meine Benutzerbibliothek alias /Users/williamliu/Library). Oder sie könnten sich auch in Ihrem Homebrew-Installationsverzeichnis /usr/local/Cellar/unixodbc/<version>/etc befinden .

  6. Öffnen Sie Ihre 'odbcinst.ini '-Datei und fügen Sie dann Folgendes hinzu (Hinweis:Anders, wenn Sie MacPorts verwenden. Für Homebrew ist diese Datei ein Link zur Homebrew-Version, z '):

    [FreeTDS]
    Description=FreeTDS Driver for Linux & MSSQL on Win32
    Driver=/usr/local/lib/libtdsodbc.so
    Setup=/usr/local/lib/libtdsodbc.so
    UsageCount=1
    
  7. Öffnen Sie Ihre 'odbc.ini ' und fügen Sie dann Folgendes hinzu (dies ist normalerweise zusammen mit odbcinst.ini :

    [MYSERVER]
    Description         = Test to SQLServer
    Driver              = FreeTDS
    Trace               = Yes
    TraceFile           = /tmp/sql.log
    Database            = MYDATABASE
    Servername          = MYSERVER
    UserName            = MYUSER
    Password            = MYPASSWORD
    Port                = 1433
    Protocol            = 8.0
    ReadOnly            = No
    RowVersioning       = No
    ShowSystemTables    = No
    ShowOidColumn       = No
    FakeOidIndex        = No
    
  8. unixODBC verifizieren korrekt installiert mit:isql MYSERVER MYUSER MYPASSWORD . Wenn Sie eine Fehlermeldung erhalten, dass Sie keine Verbindung herstellen können, fügen Sie -v hinzu um zu überprüfen, was die ausführliche Ausgabe ist, und sie zu beheben. Andernfalls sollten Sie Folgendes sehen:

    +---------------------------------------+
    | Connected!                            |
    |                                       |
    | sql-statement                         |
    | help [tablename]                      |
    | quit                                  |
    |                                       |
    +---------------------------------------+ 
    
  9. Jetzt prüfen, ob pyodbc funktioniert mit einem Python-Programm. Führen Sie Python in der Shell oder eine .py-Datei damit aus und Sie sollten Ihre Abfrage zurückbekommen:

    import pyodbc
    import pandas
    import pandas.io.sql as psql
    
    cnxn = pyodbc.connect('DSN=MYSERVER;UID=MYUSER;PWD=MYPASSWORD')
    cursor = cnxn.cursor()
    sql = ("SELECT * FROM dbo.MYDATABASE")
    df = psql.frame_query(sql, cnxn)
    

Weitere Informationen finden Sie in der Dokumentation von pyodbc, um danach weitere Hilfe zu erhalten.