Riepilogo
Sto usando un Mac su Yosemite versione 10.10.1 cercando di connettermi a un database MS SQL Server. Ho cercato e non sono riuscito a trovare una risposta dettagliata aggiornata, quindi ecco un articolo che proviene principalmente da questo fantastico articolo qui . Lo sto aggiungendo su StackOverflow nel caso in cui il collegamento muoia. L'idea è che avremo i seguenti livelli da configurare/connettere.
Livelli
- PARTE 1 - pyodbc
- PARTE 2 - freeTDS (può verificare con tsql)
- PARTE 3 - unixODBC (può controllare con isql)
- PARTE 4 - MS SQL (può controllare con un normale programma Python)
Passaggi
-
Installa Homebrew da qui - questo è un gestore di pacchetti per Mac OSX. L'articolo mostra come utilizzare un altro gestore di pacchetti "MacPorts". Per le mie istruzioni, sono con homebrew. Fondamentalmente homebrew ha una cartella "cantina" che contiene diverse versioni di pacchetti. Invece di modificare i tuoi file normali, punta invece a questi pacchetti homebrew.
-
Dobbiamo installare Pyodbc, ma pyodbc utilizza i driver iODBC per impostazione predefinita (che vengono installati con mac), ma molte persone hanno problemi a farlo funzionare. Quindi, useremo un'alternativa chiamata
unixodbc
, che installeremo in futuro. Per ora, dobbiamo configurare l'installazione di pyodbc in modo che funzioni con unixodbc.
Vai su PyPi e scarica pyodbc tarball e decomprimilo. Quindi cambia queste righe in setup.py
:
elif sys.platform == 'darwin':
# OS/X now ships with iODBC.
settings['libraries'].append('iodbc')
a:
elif sys.platform == 'darwin':
# OS/X now ships with iODBC.
settings['libraries'].append('odbc')
e ora esegui python setup.py install
.
Questo fa sì che la nostra installazione di pyodbc utilizzi i driver unixodbc per impostazione predefinita. Perfetto!
-
Installa FreeTDS con
brew install freetds --with-unixodbc
(FreeTDS è il driver che si trova tra Mac ODBC e MS SQL Server, questo il grafico qui mostra quale versione di TDS dovresti utilizzare in base alla tua versione specifica di Microsoft Server; per esempio. protocollo tds 7.2 per Microsoft SQL Server 2008). -
Configura
freetds.conf
file (Il file dovrebbe essere in '/usr/local/etc/freetds.conf', che per Homebrew è un link per dire '/usr/local/Cellar/freetds/0.91_2/etc', ma il tuo potrebbe essere da qualche parte diverso a seconda della versione). Ho modificato il globale e ho aggiunto le informazioni del mio database alla fine (per qualche motivo 'tds version =7.2' genererebbe un errore, ma funziona comunque, mentre 8.0 funziona e basta):[global] # TDS protocol version tds version = 8.0 [MYSERVER] host = MYSERVER port = 1433 tds version = 8.0
-
Verifica FreeTDS installato correttamente con:
tsql -S myserver -U myuser -P mypassword
(dovresti vedere un messaggio come questo se ha funzionato)locale is "en_US.UTF-8" locale charset is "UTF-8" using default charset "UTF-8" 1>
-
Installa unixODBC con
brew install unixodbc
. -
Configura i tuoi file di configurazione unixODBC , che include odbcinst.ini (configurazione del driver) e odbc.ini (file di configurazione DSN). Per impostazione predefinita, i miei file erano in:
/Library/ODBC
(Nota:NON la mia libreria utente alias /Users/williamliu/Library). Oppure potrebbero anche essere nella directory di installazione homebrew/usr/local/Cellar/unixodbc/<version>/etc
. -
Apri il tuo 'odbcinst.ini ' e quindi aggiungi quanto segue (Nota:diverso se usi MacPorts. Per Homebrew, questo file è un collegamento alla versione homebrew, ad esempio il mio è 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
-
Apri il tuo 'odbc.ini ' e quindi aggiungi quanto segue (di solito è insieme a
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
-
Verifica unixODBC installato correttamente con:
isql MYSERVER MYUSER MYPASSWORD
. Se ricevi un errore che non riesci a connettere, aggiungi-v
per verificare qual è l'output dettagliato e risolverlo. Altrimenti dovresti vedere questo:+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+
-
Ora verifica i lavori di pyodbc con un programma Python. Esegui python nella shell o un file .py con questo e dovresti recuperare la tua query:
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)
Puoi fare riferimento alla documentazione di pyodbc per ottenere più aiuto dopo questo.