L’oggetto Table

L’oggetto SqlTable è l’elemento centrale dell’ORM di Genropy, ma data la sua natura particolare è bene approfondire come esso venga definito ed istanziato.

Tramite la definizione della classe di mixin Table noi definiamo la table , descrivendone le sue proprietà SQL (nome, primary key), le colonne di cui si compone, le relazioni , i vincoli e gli indici.

L’istanza di applicazione in memoria carica l’intera struttura del database sotto forma di un oggetto gerarchico che contiene a sua volta gli oggetti descrittivi DbTableObj .

L’oggetto SqlTable, che viene istanziato dal metodo table, è quello che implementa tutte le funzioni di lettura e di scrittura da e sul database:

app = GnrApp('sandboxpg')
mydb = app.db
clienti_tbl = mydb.table('fatt.cliente')
<SqlTable 'fatt.cliente'>

All’interno dell’oggetto SqlTable sarà possibile individuare tutta una serie di attributi, tra i quali pkey, caption_field, name_long, name_plural, ovvero tutte le proprietà della table che abbiamo specificato nel modulo di model e tutti i metodi che abbiamo definito: oltre quindi a una serie di metodi built-in (API) comuni a tutte le tabelle (es: insert, update , query , e così via), conterrà anche tutti i metodi di mixin, ovvero tutti quei metodi che abbiamo definito all’interno della classe Table.

Suggerimento

È infatti prassi comune (e fortemente consigliata) dello sviluppo in Genropy la definizione di metodi all’interno della classe Table: in questo modo tali metodi saranno ampiamente disponibili all’interno dell’applicativo e facilmente individuabili all’interno dell’oggetto SqlTable.

All’interno di SqlTable si troverà anche la struttura stessa della tabella:

clienti_tbl.model
<gnr.sql.gnrsqlmodel.DbTableObj at 0x1035e57f0>

DbTableObj rappresenta la parte «descrittiva» del model, che definisce cioè come la tabella è costruita in termini di colonne, colonne virtuali , relazioni e così via: contiene quindi tutto ciò che è stato definito da noi nel metodo config_db.

DbTableObj è però solo un oggetto descrittivo in termini di struttura della nostra tabella. L’oggetto «attivo» che andremo ad utilizzare per le nostre Operazioni di lettura e scrittura è invece SqlTable, il «mapper» della table del database.

Lo schema seguente riassume la composizione della SqlTable:

_images/schemino-table.png

Autore della sezione: Davide Paci