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