Shrnutí
Používám Mac na Yosemite verze 10.10.1 a pokouším se připojit k databázi MS SQL Server. Hledal jsem a nemohl jsem najít aktualizovanou podrobnou odpověď, takže zde je zápis, který pochází převážně z tohoto úžasného článku zde . Přidávám to na stackoverflow pro případ, že by odkaz zanikl. Myšlenka je taková, že budeme mít následující vrstvy k nastavení/připojení.
Vrstvy
- ČÁST 1 – pyodbc
- ČÁST 2 – freeTDS (lze zkontrolovat pomocí tsql)
- ČÁST 3 – unixODBC (lze zkontrolovat pomocí isql)
- ČÁST 4 – MS SQL (lze zkontrolovat pomocí běžného programu python)
Kroky
-
Nainstalujte Homebrew z zde - toto je správce balíčků pro Mac OSX. Článek ukazuje, jak používat jiného správce balíčků 'MacPorts'. Podle mého návodu jsou s domácím nápojem. Homebrew má v podstatě složku 'sklep', která obsahuje různé verze balíčků. Místo toho, aby upravoval vaše normální soubory, místo toho ukazuje na tyto homebrew balíčky.
-
Potřebujeme nainstalovat Pyodbc, ale pyodbc ve výchozím nastavení používá ovladače iODBC (které se instalují s počítačem mac), ale mnoho lidí má problémy s jeho fungováním. Takže použijeme alternativu nazvanou
unixodbc
, kterou bychom v budoucnu instalovali. Prozatím musíme nakonfigurovat instalaci pyodbc tak, aby fungovala s unixodbc.
Přejděte na PyPi a stáhněte si pyodbc tarball a rozbalte jej. Poté změňte tyto řádky v setup.py
:
elif sys.platform == 'darwin':
# OS/X now ships with iODBC.
settings['libraries'].append('iodbc')
komu:
elif sys.platform == 'darwin':
# OS/X now ships with iODBC.
settings['libraries'].append('odbc')
a nyní spusťte python setup.py install
.
Díky tomu naše instalace pyodbc ve výchozím nastavení používá ovladače unixodbc. Perfektní!
-
Nainstalujte FreeTDS pomocí
brew install freetds --with-unixodbc
(FreeTDS je ovladač, který je umístěn mezi Mac ODBC a MS SQL Server, toto graf zde ukazuje, kterou verzi TDS byste měli používat na základě vaší konkrétní verze Microsoft Serveru; např. tds protokol 7.2 pro Microsoft SQL Server 2008). -
Nakonfigurujte
freetds.conf
soubor (Soubor by měl být v '/usr/local/etc/freetds.conf', což je pro Homebrew odkaz na '/usr/local/Cellar/freetds/0.91_2/etc', ale váš může být někde jinde v závislosti na verzi). Upravil jsem globální a přidal informace o své databázi na konec (z nějakého důvodu by 'tds version =7.2' vyvolalo chybu, ale stále funguje, zatímco 8.0 prostě funguje):[global] # TDS protocol version tds version = 8.0 [MYSERVER] host = MYSERVER port = 1433 tds version = 8.0
-
Ověřte nainstalované FreeTDS správně s:
tsql -S myserver -U myuser -P mypassword
(pokud to fungovalo, měli byste vidět výzvu jako je tato)locale is "en_US.UTF-8" locale charset is "UTF-8" using default charset "UTF-8" 1>
-
Nainstalujte unixODBC pomocí
brew install unixodbc
. -
Nastavte konfigurační soubory unixODBC , která zahrnuje odbcinst.ini (konfigurace ovladače) a odbc.ini (konfigurační soubor DSN). Ve výchozím nastavení byly moje soubory v:
/Library/ODBC
(Poznámka:NENÍ moje uživatelská knihovna aka /Users/williamliu/Library). Nebo mohou být také ve vašem instalačním adresáři homebrew/usr/local/Cellar/unixodbc/<version>/etc
. -
Otevřete svůj 'odbcinst.ini ' a poté přidejte následující (Poznámka:Liší se, pokud používáte MacPorts. Pro Homebrew je tento soubor odkazem na verzi homebrew, např. moje je v '/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
-
Otevřete svůj 'odbc.ini ' a poté přidejte následující (toto je obvykle spolu s
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
-
Ověřte unixODBC správně nainstalován s:
isql MYSERVER MYUSER MYPASSWORD
. Pokud se zobrazí chyba, že se nemůžete připojit, přidejte-v
zkontrolovat, jaký je podrobný výstup, a opravit jej. V opačném případě byste měli vidět toto:+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+
-
Nyní ověřte, že pyodbc funguje s programem python. Spusťte python v shellu nebo soubor .py s tímto a měli byste získat svůj dotaz zpět:
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)
Můžete se podívat na dokumentaci pyodbc, abyste po tomto získali další pomoc.