Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server, Python e OS X

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

  1. 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.

  2. 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!

  1. 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).

  2. 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
    
  3. 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>
    
  4. Installa unixODBC con brew install unixodbc .

  5. 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 .

  6. 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
    
  7. 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
    
  8. 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                                  |
    |                                       |
    +---------------------------------------+ 
    
  9. 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.