Ciao a tutt*, sto giocando un po' con Flask e Psycopg2. Dopo tanto tempo passato su MongoDB da una parte e Django + ORM dall'altra, mi son rimesso per vari motivi a mettere le mani su SQL e a fare le cose a manina. (Sì, son ben consapevole di tutto quello che comporta, ma non ho assolutamente voglia di lavorare con ORM e company per questo progetto personale).
Quello che voglio fare è estrarre dati dal DB con SELECT e serializzare i record in JSON, perché fornisco i dati da un endpoint della API. Sto usando RealDictCursor <http://initd.org/psycopg/docs/extras.html#real-dictionary-cursor> e va bene per la tupla corrente che mi ritorna la SELECT. Nel caso però volessi fare una JOIN con una o più tabelle le cose cambiano. Esempio micro: test=> create table users (id serial primary key, name text); test=> create table emails (id serial primary key, user_id integer references users, email text); test=> insert into users (name) values ('alberto'); test=> insert into emails (user_id, email) values (1, 'albe...@example.org '); test=> insert into emails (user_id, email) values (1, ' albe...@lemonparty.org'); test=> select * from users inner join emails on (users.id = emails.user_id); id | name | id | user_id | email ----+---------+----+---------+------------------------ 1 | alberto | 1 | 1 | albe...@example.org 1 | alberto | 2 | 1 | albe...@lemonparty.org Ora, lato applicativo Python, quello che faccio è creare un cursore e iterare sulle tuple. Sapendo che un utente ha da 0 a N email, a mano creo una struttura tipo: { 'id': 1, 'name': 'alberto', 'emails': [{ 'id': 1, 'albe...@example.org' }, { 'id': 2, 'albe...@lemonparty.org' } ] } Onestamente, fare a mano questa operazione mi sembra abbastanza idiota e macchinoso. Tempo fa avevo fatto un iteratore che iterava su dati di tipo tabella e automaticamente raggruppava quello che era possibile raggruppare (per ragioni di semplicità l'iteratore si aspetta dati ordinati). Mi chiedo, rispolvero l'iteratore che mi ero fatto o ci sono modi più eleganti e intelligenti per farlo? Insisto sul fatto che non ho molta voglia di usare un ORM. Best practices? Idee? Grazie, Alberto
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python