[Python] O non capisco sqlite, o non capisco sqlalchemy, o entrambi

Manlio Perillo manlio.perillo a gmail.com
Mar 19 Nov 2013 17:55:06 CET


On 19/11/2013 17:30, Pietro Battiston wrote:
> [...]
>> oppure:
>> for row in r:
>>      print row['id'], row['rel']
>
>
> Sì, questo mi è chiaro, ma a me piace più un
>
>      print mio_ogg.id, mio_ogg.rel
>

La differenza tra

        print row['id'], row['rel']

è solo di "facciata", specialmente se tieni conto che, in realtà, quello 
che tu hai scritto è equivalente, in Python, a:

        print mio_ogg.__dict__['id'], mio_ogg.__dict__['rel']

> ... a te no?! Perché se sto parlando di utenti e loro informazioni, di
> città e loro posizioni, e più in generale di oggetti e loro proprietà,
> dovrei scrivere di righe e loro elementi?!
>

Perchè è quello che realmente sono, visto che sono memorizzati in un 
database relazionale.

E non si parla di righe e loro elementi, ma semplicemente di righe 
(anche se il termine corretto sarebbe tupla).
Anche con l'ORM ti restituisce una lista di oggetti, no?

> [...]
> Appunto... e anche nei casi in cui (poniamo) non ho tabelle collegate,
> con l'ORM la classe me la definisco io,

Perchè, la tabella SQL no?

> posso aggiungerle dei metodi che
> mi servono,

Puoi anche definire funzioni libere, che operano sulla tuple (perchè 
tanto in Python i metodi sono funzioni libere, alla fine).

> e farlo mano a mano che ne ho bisogno, posso definirla come
> subclass di qualcos'altro,

L'ORM offre alcuni pattern complessi per diverse situazioni.
Però, come ti ha detto Nicola, non è tutto "rose e fiori".

> posso tenere distinti più facilmente i
> refactoring che eventualmente dopo un po' io volessi fare al codice che
> lavora sugli oggetti e quelli che voglio fare alla struttura del
> database (magari tutto ciò lo posso fare in qualche modo anche senza
> l'ORM, ma l'ORM mi sembra lo strumento naturale, no?)...
>

Se devi fare refactoring, ci sono metodi ben noti a livello di SQL.

> ... poi ad un livello più di principio, per me l'ORM è ciò che permette
> di usare un database ragionando ad oggetti, e la cosa, a meno di
> controindicazioni che ancora mi sfuggono, mi piace.
>

E' attrattivo certamente.
Ma non bisogna abusarne; io ti ho avvertito poi sei libero di fare come 
voi (ma il consiglio di imparare prima SQL resta, altrimenti se qualcosa 
non funziona/è inefficiente avrai grosse difficoltà).


Ciao  Manlio


Maggiori informazioni sulla lista Python