Sammanfattning
Jag använder en Mac på Yosemite version 10.10.1 och försöker ansluta till en MS SQL Server-databas. Jag sökte och kunde inte hitta ett uppdaterat detaljerat svar så här är en beskrivning som mestadels är från denna fantastiska artikel här . Jag lägger till det på stackoverflow ifall länken dör. Tanken är att vi ska ha följande lager att ställa in/ansluta.
Lager
- DEL 1 - pyodbc
- DEL 2 - freeTDS (kan kontrollera med tsql)
- DEL 3 - unixODBC (kan kontrollera med isql)
- DEL 4 - MS SQL (kan kontrollera med ett vanligt pythonprogram)
Steg
-
Installera Homebrew från här - det här är en pakethanterare för Mac OSX. Artikeln visar hur man använder en annan pakethanterare "MacPorts". För mina instruktioner, de är med homebrew. I grund och botten har homebrew en mapp "källare" som innehåller olika versioner av paket. Istället för att modifiera dina vanliga filer, pekar den istället på dessa hembryggningspaket.
-
Vi måste installera Pyodbc, men pyodbc använder iODBC-drivrutiner som standard (som kommer installerat med mac), men många har problem med att få det att fungera. Så vi kommer att använda ett alternativ som heter
unixodbc
, som vi skulle installera i framtiden. För närvarande måste vi konfigurera pyodbc-installationen så att den fungerar med unixodbc.
Gå till PyPi och ladda ner pyodbc tarball och packa upp den. Ändra sedan dessa rader i setup.py
:
elif sys.platform =='darwin':# OS/X levereras nu med iODBC. settings['libraries'].append('iodbc')
till:
elif sys.platform =='darwin':# OS/X levereras nu med iODBC. settings['libraries'].append('odbc')
och kör nu python setup.py install
.
Detta gör att vår pyodbc-installation använder unixodbc-drivrutiner som standard. Perfekt!
-
Installera FreeTDS med
brew installera freetds --with-unixodbc
(FreeTDS är drivrutinen som sitter mellan Mac ODBC och MS SQL Server, detta diagrammet här visar vilken version av TDS du bör använda baserat på din specifika Microsoft Server-version; t.ex. tds-protokoll 7.2 för Microsoft SQL Server 2008). -
Konfigurera
freetds.conf
fil (Filen ska vara i '/usr/local/etc/freetds.conf', som för Homebrew är en länk för att säga '/usr/local/Cellar/freetds/0.91_2/etc', men din kan vara någon annanstans beroende på version). Jag redigerade den globala och la till min databasinformation till slutet (av någon anledning skulle 'tds version =7.2' skapa ett fel, men fungerar fortfarande, medan 8.0 bara fungerar):[global]# TDS-protokoll versiontds version =8.0[MYSERVER]host =MYSERVERport =1433tds version =8.0
-
Verifiera att FreeTDS är installerat korrekt med:
tsql -S myserver -U myuser -P mypassword
(du bör se en sådan här prompt om det fungerade)lokal är "en_US.UTF-8"lokal teckenuppsättning är "UTF-8"med standardteckenuppsättning "UTF-8"1>
-
Installera unixODBC med
brew installera unixodbc
. -
Konfigurera dina unixODBC-konfigurationsfiler , som inkluderar odbcinst.ini (drivrutinskonfiguration) och odbc.ini (DSN-konfigurationsfil). Som standard fanns mina filer i:
/Library/ODBC
(Obs:INTE mitt användarbibliotek aka /Users/williamliu/Library). Eller de kan också finnas i din hembryggningsinstallationskatalog/usr/local/Cellar/unixodbc/
./etc -
Öppna din 'odbcinst.ini '-fil och lägg sedan till följande (Obs:Annat om du använder MacPorts. För Homebrew är den här filen en länk till homebrew-versionen, t.ex. min är i '/usr/local/Cellar/freetds/0.91_2/lib/libtdsodbc.so '):
[FreeTDS]Description=FreeTDS-drivrutin för Linux och MSSQL på Win32Driver=/usr/local/lib/libtdsodbc.soSetup=/usr/local/lib/libtdsodbc.soUsageCount=1
-
Öppna din 'odbc.ini ' och lägg sedan till följande (detta är vanligtvis tillsammans med
odbcinst.ini
:[MYSERVER]Description =Testa till SQLServerDriver =FreeTDSTrace =YesTraceFile =/tmp/sql.logDatabase =MYDATABASEServername =MYSERVERUserName =MYUSERPassword =MYPASSWORDPort =1433 =0Retocolad NoProtocolDNoProtocolInt =8.RehowInT_OxF_Nej0RehowableTInn_8. kod>
-
Verifiera unixODBC installerat korrekt med:
isql MYSERVER MYUSER MYLÖSENORD
. Om du får ett felmeddelande som du inte kan ansluta, lägg sedan till-v
för att kontrollera vad den utförliga utgången är och fixa den. Annars bör du se detta:+----------------------------------------------+| Ansluten! || || sql-sats || hjälp [tabellnamn] || sluta || |+----------------------------------------------+
-
Nu verifiera att pyodbc fungerar med ett pythonprogram. Kör python i skalet eller en .py-fil med detta och du bör få tillbaka din fråga:
importera pyodbcimport pandasimport pandas.io.sql som psqlcnxn =pyodbc.connect('DSN=MYSERVER;UID=MYUSER;PWD=MYPASSWORD')cursor =cnxn.cursor()sql =("SELECT * FROM dbo .MYDATABASE")df =psql.frame_query(sql, cnxn)
Du kan hänvisa till dokumentationen av pyodbc för att få mer hjälp efter detta.