sql >> Database >  >> RDS >> Sqlserver

SQL Server, Python en OS X

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

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

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

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

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

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

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



  1. Een database-e-mailaccount verwijderen in SQL Server (T-SQL)

  2. URL-tekenreeksindeling voor verbinding met Oracle-database met JDBC

  3. Hoe kan ik een tabel vergrendelen bij lezen, met behulp van Entity Framework?

  4. SUM gebruiken zodat NULL in kolommen de som NULL maakt