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

Manlio Perillo manlio.perillo a gmail.com
Mar 19 Nov 2013 16:10:05 CET


On 19/11/2013 11:01, Pietro Battiston wrote:
> [...]
> A parte gli scherzi: non dico che l'ORM di SQLAlchemy sia _semplice_, ma
> non l'ho mai trovato tanto più complesso di quanto lo fossero le mie
> esigenze.
>
>> Un ultimo consiglio è di non usare l'ORM a meno di non aver bisogno
>> veramente delle sue funzionalità (ossia in quei casi in cui dovresti
>> reimplementarti le query non banali a mano); non è questo il tuo caso,
>> quindi usa sqlalchemy.schema e sqlalchemy.sql, che è comunque conveniente.
>>
>
> OK, OK, uso l'ORM perché non conosco SQL... ma _anche_ perché mi fa
> risparmiare parecchio codice, e perché preferisco passare istanze che
> id/righe... non è una motivazione molto pythonica?!
>

Che intendi?

> Per quello ne ho capito io, _la_ funzionalità dell'ORM è mappare righe
> in oggetti... e non riesco a pensare ad un caso in cui _non_ ne abbia
> "bisogno veramente".
>

Non hai bisogno di mappare tuple (nel senso usato in algebra 
relazionale) in oggetti.
L'oggetto che SQLAlchemy ti restituisce dopo una query è perfettamente 
usabile:

r = sql.select([my_table], where=[...]).fetchall()
for row in r:
   for col in row:
     print col

oppure:
for row in r:
    print row['id'], row['rel']



Con l'ORM hai il vantaggio che ti "aggrega" le tuple delle tabelle 
"collegate", a seconda del tipo di relazione usata.  Nell'esempio fatto 
prima row['rel'] sarà l'id della colonna collegata se usi sqlalchemy 
core; con l'ORM sarà un dict-like contenente tutti i dati, oppure una 
sequenza di dict-like nel caso di relazioni uno a molti.

Ciao  Manlio


Maggiori informazioni sulla lista Python