Podsumowanie
Używam komputera Mac na Yosemite w wersji 10.10.1, próbując połączyć się z bazą danych MS SQL Server. Szukałem i nie mogłem znaleźć zaktualizowanej szczegółowej odpowiedzi, więc oto zapis, który pochodzi głównie z tego niesamowitego artykułu tutaj . Dodaję go na stackoverflow na wypadek śmierci łącza. Pomysł polega na tym, że będziemy mieć następujące warstwy do konfiguracji/połączenia.
Warstwy
- CZĘŚĆ 1 - pyodbc
- CZĘŚĆ 2 – freeTDS (można sprawdzić za pomocą tsql)
- CZĘŚĆ 3 - unixODBC (można sprawdzić za pomocą isql)
- CZĘŚĆ 4 - MS SQL (można sprawdzić za pomocą zwykłego programu Pythona)
Kroki
-
Zainstaluj Homebrew z tutaj - jest to menedżer pakietów dla Mac OSX. Artykuł pokazuje, jak korzystać z innego menedżera pakietów 'MacPorts'. Zgodnie z moimi instrukcjami są z homebrew. Zasadniczo homebrew ma folder „piwnica”, w którym znajdują się różne wersje pakietów. Zamiast modyfikować twoje normalne pliki, zamiast tego wskazuje te pakiety homebrew.
-
Musimy zainstalować Pyodbc, ale pyodbc domyślnie używa sterowników iODBC (które są instalowane z komputerem Mac), ale wiele osób ma problemy z jego działaniem. Więc użyjemy alternatywy o nazwie
unixodbc
, który zainstalujemy w przyszłości. Na razie musimy skonfigurować instalację pyodbc tak, aby działała z unixodbc.
Przejdź do PyPi i pobierz pyodbc tarball i rozpakuj go. Następnie zmień te wiersze w setup.py
:
elif sys.platform == 'darwin':
# OS/X now ships with iODBC.
settings['libraries'].append('iodbc')
do:
elif sys.platform == 'darwin':
# OS/X now ships with iODBC.
settings['libraries'].append('odbc')
a teraz uruchom python setup.py install
.
To sprawia, że nasza instalacja pyodbc domyślnie używa sterowników unixodbc. Idealnie!
-
Zainstaluj FreeTDS z
brew install freetds --with-unixodbc
(FreeTDS to sterownik, który znajduje się pomiędzy Mac ODBC i MS SQL Server, to wykres tutaj pokazuje, której wersji TDS należy używać w oparciu o konkretną wersję serwera Microsoft; np. protokół tds 7.2 dla Microsoft SQL Server 2008). -
Skonfiguruj
freetds.conf
plik (Plik powinien znajdować się w '/usr/local/etc/freetds.conf', co w przypadku Homebrew oznacza '/usr/local/Cellar/freetds/0.91_2/etc', ale twój może być w innym miejscu w zależności od wersji). Edytowałem globalne i dodałem informacje o mojej bazie danych na końcu (z jakiegoś powodu 'tds version =7.2' spowodowałby błąd, ale nadal działa, podczas gdy 8.0 po prostu działa):[global] # TDS protocol version tds version = 8.0 [MYSERVER] host = MYSERVER port = 1433 tds version = 8.0
-
Zweryfikuj zainstalowaną FreeTDS poprawnie z:
tsql -S myserver -U myuser -P mypassword
(powinieneś zobaczyć taki komunikat, jeśli zadziałał)locale is "en_US.UTF-8" locale charset is "UTF-8" using default charset "UTF-8" 1>
-
Zainstaluj unixODBC z
brew install unixodbc
. -
Skonfiguruj swoje pliki konfiguracyjne unixODBC , który obejmuje odbcinst.ini (konfiguracja sterownika) i odbc.ini (plik konfiguracyjny DSN). Domyślnie moje pliki znajdowały się w:
/Library/ODBC
(Uwaga:NIE moja biblioteka użytkownika aka /Users/williamliu/Library). Mogą też znajdować się w katalogu instalacyjnym homebrew/usr/local/Cellar/unixodbc/<version>/etc
. -
Otwórz swój „odbcinst.ini ', a następnie dodaj następujący (Uwaga:inny, jeśli używasz MacPorts. W przypadku Homebrew ten plik jest linkiem do wersji homebrew, np. mój znajduje się w '/usr/local/Cellar/freetds/0.91_2/lib/libtdsodbc.so '):
[FreeTDS] Description=FreeTDS Driver for Linux & MSSQL on Win32 Driver=/usr/local/lib/libtdsodbc.so Setup=/usr/local/lib/libtdsodbc.so UsageCount=1
-
Otwórz swój „odbc.ini ', a następnie dodaj następujące (zwykle jest to razem z
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
-
Zweryfikuj unixODBC poprawnie zainstalowany z:
isql MYSERVER MYUSER MYPASSWORD
. Jeśli pojawi się błąd, z którym nie możesz się połączyć, dodaj-v
aby sprawdzić, co to jest pełne wyjście i naprawić. W przeciwnym razie powinieneś zobaczyć to:+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+
-
Teraz zweryfikuj działanie pyodbc z programem Python. Uruchom Pythona w powłoce lub pliku .py z tym i powinieneś odzyskać swoje zapytanie:
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)
Możesz zapoznać się z dokumentacją pyodbc, aby uzyskać dalszą pomoc po tym.