2011-12-21 10 views
12

Sto scrivendo uno script veloce e sporco che richiede l'interazione con un database (PG).SQLAlchemy o psycopg2?

La sceneggiatura è una soluzione pragmatica e tattica a un problema esistente. tuttavia, immagino che la sceneggiatura si evolverà nel tempo in un sistema più "raffinato". Dato che attualmente viene messo insieme molto rapidamente (cioè non ho il tempo di riversare enormi quantità di documentazione), sono tentato di seguire la strada veloce e sporca, usando psycopg.

I vantaggi per psycopg2 (come ho attualmente capito) è che:

  1. scritto in C, in modo più veloce di SQLAlchemy (scritto in Python)?
  2. Nessun livello di astrazione sul DBAPI poiché funziona con un db e un db solo (implicazione -> veloce)
  3. (Per ora), non ho bisogno di un ORM, quindi posso eseguire direttamente le mie istruzioni SQL senza avere per imparare una nuova sintassi ORM (cioè leggero)

Svantaggi:

  1. SO che vorrò un ORM più in basso la linea
  2. psycopg2 è ("datato"?) - don' so per quanto tempo rimarrà in giro per

sono le mie percezioni di SQLAlchemy (interpretato, gonfio, curva di apprendimento lenta/ripida) vero - C'è qualche cosa che posso usare SQLAlchemy nel modo "di massima e pronta" Voglio usare psycopg - vale a dire:

  1. eseguire istruzioni SQL direttamente senza dover pasticciare con lo strato ORM, ecc

alcun esempio di fare questo a disposizione?

+0

Dove hai scelto l'idea che psycopg2 sia "datato"? Cosa dovrebbe essere eliminato gradualmente? – piro

risposta

31

SQLAlchemy è un ORM, psycopg2 è un driver di database. Si tratta di cose completamente diverse: SQLAlchemy genera istruzioni SQL e psycopg2 invia istruzioni SQL al database. SQLAlchemy dipende da psycopg2 o altri driver di database per comunicare con il database!

Come un livello software piuttosto complesso, SQLAlchemy aggiunge un sovraccarico, ma è anche un enorme vantaggio per la velocità di sviluppo, almeno una volta che hai imparato la libreria. SQLAlchemy è una libreria eccellente e ti insegnerà l'intero concetto di ORM, ma se non vuoi generare istruzioni SQL per iniziare, allora non vuoi SQLAlchemy.

+0

Hai letto un po 'su SQLAlchemy. Ho appena scoperto che posso specificare psycopg2 come un driver e più o meno usare SQL a mano come mi piacerebbe, quindi ho deciso di andare con SQLAlchemy dopo tutto. –

+1

SQLAlchemy e psycopg2 sono cose completamente diverse, quella parte è vera. Ma SQLAlchemy non è un ORM. L'ORM è solo una parte di esso, una parte che puoi scegliere di ignorare completamente (e che è stata pensata per essere completamente opzionale dal suo creatore, come si afferma in questo piuttosto lungo video introduttivo: http://www.youtube.com/watch? v = P141KRbxVKc). Quindi, in un caso come questo (obsoleto) problema di OP, SA potrebbe essere lo strumento per la soluzione SQL "q'n'd" raw con la possibilità di passare a orm in seguito, senza cambiare lo strumento. – kratenko

3

Per parlare con il database, è necessario disporre di un driver. Se utilizzi client come SQL Plus per Oracle, MysqlCLI per Mysql, eseguirà la query e quel client verrà fornito con DBServer Pack.

Per comunicare dall'esterno con qualsiasi linguaggio come java, c, python, C# ... Abbiamo bisogno di driver per quel database. psycopg2 è il driver per eseguire query per PostgreSQL da python.

SQLAlchemy è l'ORM che non è lo stesso del driver di database. Ti darà flessibilità in modo da poter scrivere il tuo codice senza standard specifici per database. ORM fornisce l'indipendenza del database per il programmatore. Se scrivi object.save in ORM allora controllerà, quale database è associato a quell'oggetto e genererà query di inserimento in base al database di back-end.