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
-
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.
-
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!
-
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). -
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
-
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>
-
Installieren Sie unixODBC mit
brew install unixodbc
. -
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 . -
Ö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
-
Ö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
-
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 | | | +---------------------------------------+
-
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.