sql >> Databáze >  >> RDS >> Sqlserver

SQL Server, Python a OS X

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

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

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

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

  2. 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
    
  3. 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>
    
  4. Nainstalujte unixODBC pomocí brew install unixodbc .

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

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



  1. SQL Server 2008 – Pokročilé vyhledávání/Řazení

  2. UnboundLocalError:místní proměnná 'cursor' odkazovaná před přiřazením

  3. GROUP BY po sobě jdoucí data oddělená mezerami

  4. Porušení integrity Mysql/PDO Duplicate Primary – ačkoli v tabulce již nic není