2012-01-11 14 views
18

Sono relativamente nuovo ai database, eseguo query SQL, ecc. Al momento utilizzo esclusivamente MS SQL Server per i miei DB (è quello che usiamo nel mio lavoro), ma si spera le risposte alla mia domanda possono essere più generali che solo per quel particolare DB.pymssql versus pyodbc versus adodbapi versus ...

Faccio una buona parte del mio lavoro utilizzando l'app di interfaccia DB stessa (in questo caso, SQL Server Management Studio), ma faccio anche un po 'di lavoro tramite script python, alcuni dei quali funzionano come cron, alcuni dei quali sono siti Web tali che gli utenti possono inviare query nel DB.

Ho utilizzato il modulo pymssql per l'interrogazione nella scrittura & in DB da python. Ma ci sono alcuni fastidiosi problemi che sto incontrando. (Sembra che pymssql non possa usare tabelle temporanee, e anche io ho avuto problemi con "autocommit", ma probabilmente è colpa mia.)

Quindi, ignorando molto di questo, mi piacerebbe un sapore di cosa direzione dovrei andare. Per quanto posso dire, ho potuto neanche:

  • uso pymssql, che parla direttamente ai server MS SQL
  • uso pyodbc, che richiede FreeTDS installazione & unixODBC prima, e impostandole
  • uso modulo adodbapi, e non sono sicuro di quali requisiti sono necessari qui.
  • un altro metodo ??

Il fatto è che non lo faccio COMPLETAMENTE ottenere ciò che ODBC fa. Sembra una specie di "intermediario di autenticazione", un po 'come un intermediario per assicurarsi che l'utente sia chi dice. E ho ancora meno comprensione di ADO.

Mentre pymssql sembra il modo più semplice per andare, sembra anche quello che la gente pensa meno, e che alla fine sarà deprecato. Preferirei imparare il modo "giusto" dato che sono praticamente solo all'inizio con questa roba.

Quindi sto cercando alcune opinioni informate sul modo migliore per ottenere Python per parlare con MS SQL Server e per parlare con DB in generale. Definirei "migliore" come il migliore per qualcuno che farà cose moderatamente complesse con esso. (Mentre sto per iniziare, è qualcosa che alla fine dovrò incrementare un po '.)

Grazie! Mike

risposta

16

pyodbc (consigliato)

ho iniziato ad usare questo modulo a pochi mesi fa e non ho lamentele finora. La comunità di sviluppo sembra più attiva di pymssql. Finora non ho avuto problemi di installazione (32 bit Win XP e 64bit Server 2008 R2). Avrai l'ulteriore vantaggio di non essere limitato ai server MS SQL.

È possibile trovare: http://www.lfd.uci.edu/~gohlke/pythonlibs/ utile se si sta installando su Windows.

pymssql

con cui ho lavorato con la versione 1.x per circa 2,5 anni. Ho avuto alcuni problemi minori con le limitazioni di dimensioni per oggetti di grandi dimensioni. Ho anche avuto grossi problemi durante il multi-threading (al punto che dovevo girare se spento). 1.x era basato su librerie MS deprecate.Tuttavia, la versione recente è 2.xe non usa più queste librerie deprecate. Invece usa FreeTDS (come pyodbc). Sembra buono, ma non l'ho ancora provato.

adodbapi

Ho provato a passare fuori pymssql e la sua sostituzione con adodbapi circa un anno fa e alcune delle domande che hanno lavorato bene con pymssql riuscito senza alcun motivo evidente. Ho subito abbandonato di nuovo Adodbapi.

+3

Come annunciato a dicembre 2016, pyodbc è ora [ufficialmente supportato da Microsoft] (https://blogs.technet.microsoft.com/dataplatforminsider/2016/12/09/sql-server -python-cosa-new /). –

9

Dalla mia esperienza, PYODBC è un po 'problematico in questi giorni. Innanzitutto, non sembra gestire le stringhe Unicode in modo corretto o affidabile. In secondo luogo, l'API è un po 'obsoleta e specifica e meno Python DB-API (PEP-249) compatibile.

Sono nel bel mezzo della migrazione del codice di progetto a PYMSSQL che, durante i miei test fino ad ora, copre le basi su entrambi i problemi di cui sopra. Non sono a conoscenza di alcuna deprecazione con questa API in quanto sembra essere aggiornata un po 'di frequente (versione principale nell'ottobre 2013), i documenti sono più o meno aggiornati e il file è attivo.

Queste sono solo le mie attuali scoperte e progressi con PYODBC e PYMSSQL. Tutto soggetto a cambiamenti ovviamente :)

+2

Sì, pyodbc ha subito un po 'di problemi, ma recentemente ha ricevuto alcune TLC ed è ora [ufficialmente supportato da Microsoft] (https://blogs.technet.microsoft.com/dataplatforminsider/2016/12/09/ sql-server-python-cosa-new /). –

+1

All'inizio di quest'anno (2017) è stata proposta la sospensione di pymssql, si veda [Proposta di interruzione di pymssql in favore di pyodbc] (https://github.com/pymssql/pymssql/issues/477) e [pymssql vs pyodbc] (https://groups.google.com/forum/#!topic/pymssql/CLXHtLKBWig). Hanno deciso di continuare, ma l'ultimo link mostra che la comunità dietro le palestre è in difficoltà a trovare manutentori. Penso che al momento pyodbc sembri una scelta migliore in generale (forse pymssql è ancora meglio a seconda delle tue esigenze). –