sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server, Python och OS X

Sammanfattning

Jag använder en Mac på Yosemite version 10.10.1 och försöker ansluta till en MS SQL Server-databas. Jag sökte och kunde inte hitta ett uppdaterat detaljerat svar så här är en beskrivning som mestadels är från denna fantastiska artikel här . Jag lägger till det på stackoverflow ifall länken dör. Tanken är att vi ska ha följande lager att ställa in/ansluta.

Lager

  • DEL 1 - pyodbc
  • DEL 2 - freeTDS (kan kontrollera med tsql)
  • DEL 3 - unixODBC (kan kontrollera med isql)
  • DEL 4 - MS SQL (kan kontrollera med ett vanligt pythonprogram)

Steg

  1. Installera Homebrew från här - det här är en pakethanterare för Mac OSX. Artikeln visar hur man använder en annan pakethanterare "MacPorts". För mina instruktioner, de är med homebrew. I grund och botten har homebrew en mapp "källare" som innehåller olika versioner av paket. Istället för att modifiera dina vanliga filer, pekar den istället på dessa hembryggningspaket.

  2. Vi måste installera Pyodbc, men pyodbc använder iODBC-drivrutiner som standard (som kommer installerat med mac), men många har problem med att få det att fungera. Så vi kommer att använda ett alternativ som heter unixodbc , som vi skulle installera i framtiden. För närvarande måste vi konfigurera pyodbc-installationen så att den fungerar med unixodbc.

Gå till PyPi och ladda ner pyodbc tarball och packa upp den. Ändra sedan dessa rader i setup.py :

elif sys.platform =='darwin':# OS/X levereras nu med iODBC. settings['libraries'].append('iodbc') 

till:

elif sys.platform =='darwin':# OS/X levereras nu med iODBC. settings['libraries'].append('odbc') 

och kör nu python setup.py install .

Detta gör att vår pyodbc-installation använder unixodbc-drivrutiner som standard. Perfekt!

  1. Installera FreeTDS med brew installera freetds --with-unixodbc (FreeTDS är drivrutinen som sitter mellan Mac ODBC och MS SQL Server, detta diagrammet här visar vilken version av TDS du bör använda baserat på din specifika Microsoft Server-version; t.ex. tds-protokoll 7.2 för Microsoft SQL Server 2008).

  2. Konfigurera freetds.conf fil (Filen ska vara i '/usr/local/etc/freetds.conf', som för Homebrew är en länk för att säga '/usr/local/Cellar/freetds/0.91_2/etc', men din kan vara någon annanstans beroende på version). Jag redigerade den globala och la till min databasinformation till slutet (av någon anledning skulle 'tds version =7.2' skapa ett fel, men fungerar fortfarande, medan 8.0 bara fungerar):

    [global]# TDS-protokoll versiontds version =8.0[MYSERVER]host =MYSERVERport =1433tds version =8.0 
  3. Verifiera att FreeTDS är installerat korrekt med:tsql -S myserver -U myuser -P mypassword (du bör se en sådan här prompt om det fungerade)

    lokal är "en_US.UTF-8"lokal teckenuppsättning är "UTF-8"med standardteckenuppsättning "UTF-8"1> 
  4. Installera unixODBC med brew installera unixodbc .

  5. Konfigurera dina unixODBC-konfigurationsfiler , som inkluderar odbcinst.ini (drivrutinskonfiguration) och odbc.ini (DSN-konfigurationsfil). Som standard fanns mina filer i:/Library/ODBC (Obs:INTE mitt användarbibliotek aka /Users/williamliu/Library). Eller de kan också finnas i din hembryggningsinstallationskatalog /usr/local/Cellar/unixodbc//etc .

  6. Öppna din 'odbcinst.ini '-fil och lägg sedan till följande (Obs:Annat om du använder MacPorts. För Homebrew är den här filen en länk till homebrew-versionen, t.ex. min är i '/usr/local/Cellar/freetds/0.91_2/lib/libtdsodbc.so '):

    [FreeTDS]Description=FreeTDS-drivrutin för Linux och MSSQL på Win32Driver=/usr/local/lib/libtdsodbc.soSetup=/usr/local/lib/libtdsodbc.soUsageCount=1
  7. Öppna din 'odbc.ini ' och lägg sedan till följande (detta är vanligtvis tillsammans med odbcinst.ini :

    [MYSERVER]Description =Testa till SQLServerDriver =FreeTDSTrace =YesTraceFile =/tmp/sql.logDatabase =MYDATABASEServername =MYSERVERUserName =MYUSERPassword =MYPASSWORDPort =1433 =0Retocolad NoProtocolDNoProtocolInt =8.RehowInT_OxF_Nej 
  8. Verifiera unixODBC installerat korrekt med:isql MYSERVER MYUSER MYLÖSENORD . Om du får ett felmeddelande som du inte kan ansluta, lägg sedan till -v för att kontrollera vad den utförliga utgången är och fixa den. Annars bör du se detta:

    +----------------------------------------------+| Ansluten! || || sql-sats || hjälp [tabellnamn] || sluta || |+----------------------------------------------+  
  9. Nu verifiera att pyodbc fungerar med ett pythonprogram. Kör python i skalet eller en .py-fil med detta och du bör få tillbaka din fråga:

    importera pyodbcimport pandasimport pandas.io.sql som psqlcnxn =pyodbc.connect('DSN=MYSERVER;UID=MYUSER;PWD=MYPASSWORD')cursor =cnxn.cursor()sql =("SELECT * FROM dbo .MYDATABASE")df =psql.frame_query(sql, cnxn) 

Du kan hänvisa till dokumentationen av pyodbc för att få mer hjälp efter detta.



  1. SQL-fråga för att hämta rader där ett värde finns i ett kommaseparerat fält

  2. Hur man förbättrar frågeprestanda med många JOINs

  3. Hur man definierar en primärnyckel för automatisk ökning i PostgreSQL

  4. Är det möjligt att använda en MySql användardefinierad variabel i ett .NET MySqlCommand?