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

SQL Server, Python og OS X

Oversigt

Jeg bruger en Mac på Yosemite version 10.10.1 og prøver at oprette forbindelse til en MS SQL Server-database. Jeg søgte og kunne ikke finde et opdateret detaljeret svar, så her er en skrivning, der hovedsagelig er fra denne fantastiske artikel her . Jeg tilføjer det på stackoverflow i tilfælde af at linket dør. Tanken er, at vi skal have følgende lag til at konfigurere/forbindelse.

Lag

  • DEL 1 - pyodbc
  • DEL 2 - freeTDS (kan tjekke med tsql)
  • DEL 3 - unixODBC (kan tjekke med isql)
  • DEL 4 - MS SQL (kan tjekke med et almindeligt python-program)

Trin

  1. Installer Homebrew fra her - dette er en pakkehåndtering til Mac OSX. Artiklen viser, hvordan man bruger en anden pakkehåndtering 'MacPorts'. Til mine instruktioner er de med hjemmebrygget. Grundlæggende har homebrew en mappe 'kælder', der rummer forskellige versioner af pakker. I stedet for at ændre dine normale filer, peger den i stedet på disse hjemmebryggede pakker.

  2. Vi skal installere Pyodbc, men pyodbc bruger iODBC-drivere som standard (som kommer installeret med mac), men mange mennesker har problemer med at få det til at fungere. Så vi kommer til at bruge et alternativ kaldet unixodbc , som vi ville installere i fremtiden. Indtil videre skal vi konfigurere pyodbc-installationen, så den fungerer med unixodbc.

Gå til PyPi og download pyodbc tarball og udkomprimer den. Skift derefter disse linjer i setup.py :

elif sys.platform =='darwin':# OS/X leveres nu med iODBC. indstillinger['biblioteker'].append('iodbc') 

til:

elif sys.platform =='darwin':# OS/X leveres nu med iODBC. indstillinger['biblioteker'].append('odbc') 

og kør nu python setup.py install .

Dette gør, at vores pyodbc-installation bruger unixodbc-drivere som standard. Perfekt!

  1. Installer FreeTDS med brew install freetds --with-unixodbc (FreeTDS er driveren, der sidder mellem Mac ODBC og MS SQL Server, dette diagrammet her viser, hvilken version af TDS du skal bruge baseret på din specifikke Microsoft Server-version; for eksempel. tds protokol 7.2 til Microsoft SQL Server 2008).

  2. Konfigurer freetds.conf fil (Filen skal være i '/usr/local/etc/freetds.conf', som for Homebrew er et link til at sige '/usr/local/Cellar/freetds/0.91_2/etc', men din kan være et andet sted afhængig af version). Jeg redigerede den globale og tilføjede min databaseinformation til slutningen (af en eller anden grund ville 'tds version =7.2' give en fejl, men stadig fungere, mens 8.0 bare virker):

    [global]# TDS-protokol versiontds version =8.0[MYSERVER]host =MYSERVERport =1433tds version =8.0 
  3. Bekræft FreeTDS installeret korrekt med:tsql -S myserver -U myuser -P mypassword (du skulle se en prompt som denne, hvis det virkede)

    lokalitet er "en_US.UTF-8"lokaltegnsæt er "UTF-8"ved hjælp af standardtegnsæt "UTF-8"1> 
  4. Installer unixODBC med brew install unixodbc .

  5. Konfigurer dine unixODBC-konfigurationsfiler , som omfatter odbcinst.ini (driverkonfiguration) og odbc.ini (DSN-konfigurationsfil). Som standard var mine filer i:/Library/ODBC (Bemærk:IKKE mit brugerbibliotek aka /Users/williamliu/Library). Eller de kan også være i din hjemmebryggede installationsmappe /usr/local/Cellar/unixodbc//etc .

  6. Åbn din 'odbcinst.ini ' fil, og tilføj derefter følgende (Bemærk:Anderledes hvis du bruger MacPorts. For Homebrew er denne fil et link til homebrew-versionen, f.eks. min er i '/usr/local/Cellar/freetds/0.91_2/lib/libtdsodbc.so '):

    [FreeTDS]Description=FreeTDS-driver til Linux og MSSQL på Win32Driver=/usr/local/lib/libtdsodbc.soSetup=/usr/local/lib/libtdsodbc.soUsageCount=1 
  7. Åbn din 'odbc.ini ' og tilføj derefter følgende (dette er normalt sammen med odbcinst.ini :

    [MYSERVER]Description =Test til SQLServerDriver =FreeTDSTrace =YesTraceFile =/tmp/sql.logDatabase =MYDATABASEServername =MYSERVERUserName =MYUSERPassword =MYPASSWORDPort =1433ProtokolNej =0RehowOnIngen SystemIndOxHowIdNo =0ProtokolNej =0ProtokolIdIngIngenSystemdOxShowI kode> 
  8. Bekræft unixODBC installeret korrekt med:isql MYSERVER MYUSER MYPASSWORD . Hvis du får en fejlmeddelelse om, at du ikke kan oprette forbindelse, skal du tilføje -v for at kontrollere, hvad det verbose output er, og rette det. Ellers skulle du se dette:

    +----------------------------------------------+| Forbundet! || || sql-sætning || hjælp [tabelnavn] || afslut || |+----------------------------------------------+
  9. Bekræft nu, at pyodbc fungerer med et python-program. Kør python i skallen eller en .py-fil med denne, og du bør få din forespørgsel tilbage:

    importer 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 se dokumentationen af pyodbc for at få mere hjælp efter dette.



  1. vælg max- og min-værdier for hver x-mængde af rows-postgresql

  2. Er der nogen forskel mellem varchar(10) og varchar(1000), når vi gemmer streng, hvis længde er mindre end 10?

  3. hvordan får man start- og slutdatoerne for alle uger mellem to datoer i SQL server?

  4. Hvor stor er en buffer i PostgreSQL