Il model di Genropy

Il model di Genropy si basa su una structure che viene utilizzata per descrivere package, tabelle, colonne, relazioni, che lo sviluppatore desidera utilizzare nel db. Lo scopo di questa struttura è quello di definire la composizione del db che servirà sia per generare i comandi di config del db (vedi sezione dedicata alla gnrdbsetup) sia per creare le query e le istruzioni SQL necessarie a interrogazioni e modifiche.

Sarà quindi compito dello sviluppatore definire tutte le tabelle e le colonne e le relazioni utilizzando le chiamate opportune che saranno descritte nel corso del capitolo.

Quando il sistema sarà avviato il motore dell’ORM provvederà, a partire dalla struttura così definita, a creare tutti gli oggetti in memoria che si occuperanno di generare i comandi SQL.

La descrizione del model

All’avvio di un’applicativo Genropy viene letto il file instanceconfig.xml, il file che contiene le impostazioni di configurazione dell’istanza di applicazione. Per ogni package indicato viene caricato l’elenco delle tabelle individuate all’interno della cartella model, verrà costruita una Bag con le definizioni delle varie tabelle e questa Bag verrà passata a un builder che si occuperà della costruzione di tutti gli oggetti necessari.

Suggerimento

Si rimanda alla sezione Structure e Object e al Corso Base di Genropy per un ulteriore approfondimento su questi argomenti.

La struttura segue sempre questa gerarchia

Database
packages
package p1
tables
table t1
columns

column c1 column c2 … column cn

table t2 … table tn

package p2 … package pn

Seguendo questo schema, proviamo ad analizzare la struttura di un applicativo Genropy. Una volta istanziata un’applicazione, come abbiamo visto nell” Introduzione , all’interno dell”oggetto database possiamo vedere subito il model:

model = db.model

Del model troviamo in src la Bag che corrisponde alla struttura dell’intero database:

model_structure = model.src

Il primo livello della struttura è costituito dai package

model_structure['packages'].keys()

['sys', 'adm', 'glbl', 'sandbox', 'tutor', 'test15', 'biz', 'fatt']

E più in profondità per ogni package troviamo le sue tabelle. Prendiamo ad esempio quelle del package glbl:

model_structure['packages.glbl.tables'].keys()

['comune', 'localita', 'nazione', 'nuts', 'provincia', 'regione']

Come abbiamo detto, questa è la Bag del model, ovvero la struttura. Una volta costruita questa struttura, il builder dell’ORM si occuperà di trasformarla in una serie di oggetti necessari alla corretta «renderizzazione». Al centro c’è sempre la Table :

model_structure['packages.glbl'].keys()

['tables']

All’interno della Table ci sono poi le colonne , suddivise tra colonne «reali» del record e Colonne virtuali .

model_structure['packages.glbl.tables.provincia'].keys()

['columns', 'virtual_columns']

gnrdbsetup

Una volta costruito il model, e a ogni sua successiva modifica (sia essa a una tabella , a una colonna , o a una relazione ), è necessaria un’operazione di creazione o riallineamento con il database.

Genropy mette a disposizione per tale operazione un apposito script. In una finestra di terminale, con il comando:

gnrdbsetup nomeistanza

verrà lanciato uno script che si occuperà di creare le tabelle e le colonne mancanti (o modificate dall’ultima esecuzione).

La gnrdbsetup ha anche delle funzionalità addizionali: per esempio, eseguendo gnrdbsetup nomeistanza -u verranno creati anche i sysRecord di default delle tabelle. Per una lista completa delle opzioni disponibili, digita sul terminale gnrdbsetup -h

Suggerimento

Si noti che Genropy supporta diversi RDBMS (SQLite, PostgreSQL, MySQL, Microsoft SQL), ognuno dei quali può avere delle specificità di cui si dovrà tenere conto al lancio della gnrdbsetup e più in generale durante la gestione del progetto (SQLite, a mero titolo di esempio, presenta dei limiti nella gestione del comando ALTER TABLE). Si tenga presente che il sistema più collaudato e di conseguenza consigliato è PostgreSQL.

Vediamo ora come sono definite le singole componenti del Model di Genropy, partendo dal primo livello di questa struttura gerarchica: la definizione di un package .


Allegati:

Autore della sezione: Davide Paci