Samenvatting
Ik gebruik een Mac op Yosemite versie 10.10.1 om verbinding te maken met een MS SQL Server-database. Ik heb gezocht en kon geen bijgewerkt gedetailleerd antwoord vinden, dus hier is een beschrijving die voornamelijk uit dit geweldige artikel komt hier . Ik voeg het toe aan stackoverflow voor het geval de link sterft. Het idee is dat we de volgende lagen hebben om in te stellen/aan te sluiten.
Lagen
- DEEL 1 - pyodbc
- DEEL 2 - freeTDS (kan controleren met tsql)
- DEEL 3 - unixODBC (kan controleren met isql)
- DEEL 4 - MS SQL (kan controleren met een gewoon python-programma)
Stappen
-
Installeer Homebrew van hier - dit is een pakketbeheerder voor Mac OSX. Het artikel laat zien hoe je een andere pakketbeheerder 'MacPorts' kunt gebruiken. Voor mijn instructies, ze zijn met homebrew. In principe heeft homebrew een map 'kelder' die verschillende versies van pakketten bevat. In plaats van je normale bestanden aan te passen, verwijst het naar deze zelfgemaakte pakketten.
-
We moeten Pyodbc installeren, maar pyodbc gebruikt standaard iODBC-stuurprogramma's (die bij mac worden geïnstalleerd), maar veel mensen hebben problemen om het te laten werken. We gaan dus een alternatief gebruiken genaamd
unixodbc
, die we in de toekomst zouden installeren. Voor nu moeten we de pyodbc-installatie zo configureren dat deze werkt met unixodbc.
Ga naar PyPi en download pyodbc tarball en decomprimeer het. Wijzig vervolgens deze regels in setup.py
:
elif sys.platform == 'darwin':
# OS/X now ships with iODBC.
settings['libraries'].append('iodbc')
naar:
elif sys.platform == 'darwin':
# OS/X now ships with iODBC.
settings['libraries'].append('odbc')
en voer nu python setup.py install
uit .
Hierdoor gebruikt onze pyodbc-installatie standaard Unixodbc-stuurprogramma's. Perfect!
-
Installeer FreeTDS met
brew install freetds --with-unixodbc
(FreeTDS is de driver die tussen de Mac ODBC en MS SQL Server zit, dit de grafiek hier laat zien welke versie van TDS u zou moeten gebruiken op basis van uw specifieke Microsoft Server-versie; bijv. tds-protocol 7.2 voor Microsoft SQL Server 2008). -
Configureer
freetds.conf
bestand (Het bestand moet in '/usr/local/etc/freetds.conf' staan, wat voor Homebrew een link is om '/usr/local/Cellar/freetds/0.91_2/etc' te zeggen, maar die van jou kan ergens anders zijn afhankelijk van de versie). Ik heb de global bewerkt en mijn database-info aan het einde toegevoegd (om de een of andere reden zou 'tds-versie =7.2' een fout geven, maar het werkt nog steeds, terwijl 8.0 gewoon werkt):[global] # TDS protocol version tds version = 8.0 [MYSERVER] host = MYSERVER port = 1433 tds version = 8.0
-
Controleer of FreeTDS is geïnstalleerd correct met:
tsql -S myserver -U myuser -P mypassword
(u zou zo'n prompt moeten zien als het werkte)locale is "en_US.UTF-8" locale charset is "UTF-8" using default charset "UTF-8" 1>
-
Installeer unixODBC met
brew install unixodbc
. -
Stel uw unixODBC-configuratiebestanden in , waaronder odbcinst.ini (stuurprogrammaconfiguratie), en odbc.ini (DSN-configuratiebestand). Standaard stonden mijn bestanden in:
/Library/ODBC
(Opmerking:NIET mijn gebruikersbibliotheek oftewel /Users/williamliu/Library). Of ze kunnen ook in uw homebrew-installatiemap staan /usr/local/Cellar/unixodbc/<version>/etc
. -
Open uw 'odbcinst.ini ' bestand en voeg vervolgens het volgende toe (Opmerking:dit is anders als u MacPorts gebruikt. Voor Homebrew is dit bestand een link naar de homebrew-versie, bijv. de mijne bevindt zich in '/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
-
Open uw 'odbc.ini ' en voeg dan het volgende toe (dit gaat meestal samen met
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 verifiëren correct geïnstalleerd met:
isql MYSERVER MYUSER MYPASSWORD
. Als je een foutmelding krijgt dat je geen verbinding kunt maken, voeg dan-v
. toe om te controleren wat de uitgebreide uitvoer is en deze te repareren. Anders zou je dit moeten zien:+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+
-
Nu verifieer dat pyodbc werkt met een python-programma. Voer python uit in de shell of een .py-bestand hiermee en je zou je vraag terug moeten krijgen:
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)
U kunt de documentatie raadplegen van pyodbc om hierna meer hulp te krijgen.