Definire una table¶
Costruiamo a titolo di esempio una tabella nominativo
. Per costruire una tabella andiamo a creare un file nominativo.py dove definiamo la classe Table:
class Table(object):
def config_db(self, pkg):
tbl = pkg.table('nominativo', pkey='chiave', name_long='!![it]Nominativo',
name_plural='!![it]Nominativi',caption_field='nome')
tbl.column('chiave', size=':8', dtype='I', name_long='!![it]Chiave')
tbl.column('data_inserimento', dtype='DH', name_long='!![it]Data di inserimento')
tbl.column('nome', name_long='!![it]Nome')
tbl.column('cognome', name_long='!![it]Cognome')
tbl.column('indirizzo',name_long='!![it]Indirizzo')
tbl.column('comune_id',size='22' ,group='_',name_long='!![it]Comune').relation('glbl.comune.id',relation_name='clienti',mode='foreignkey',onDelete='raise')
Per creare una table quindi:
definiamo una classe
Table
che eredita dal generico oggetto Python objectridefiniamo un metodo obbligatorio
config_db
, dove andiamo a specificare tutti gli attributi della tabella, innanzitutto ilname
(solitamente implicito, al primo posto), lapkey
(ovvero la chiave primaria), e una serie di altri attributi facoltativiaggiungiamo tutte le colonne che desideriamo, come colonne reali , colonne virtuali ed eventuali relazioni
possiamo a questo punto definire nella classe Table anche tutta una serie di metodi personalizzati o Trigger per eseguire delle operazioni sulla tabella.
Suggerimento
La pkey può essere di qualunque tipo. Se numerica, il sistema riconoscerà automaticamente la progressività proponendo di default il valore incrementato di 1 all’inserimento di un nuovo record. Alternativamente, Genropy propone di default una chiave univoca di 22 caratteri casuali, abilitata utilizzando i sysFields .
Notiamo che la classe Table che abbiamo così definito è una classe «astratta» di mixin. Sarà poi il motore di Genropy a istanziare l’oggetto DbTableObj partendo dalla traccia semplificata che abbiamo fornito noi: il programmatore si limita infatti a descrivere la «punta dell’iceberg», e l’ORM si occuperà del resto.
Per i dettagli sul funzionamento dell’oggetto Table rimandiamo alla sezione dedicata .
Parametri:
Nome parametro |
Tipo |
Descrizione |
---|---|---|
name |
T |
Generalmente implicito, permette di indicare il nome della tabella (es: “cliente”) |
pkey |
T |
Indica quale colonna è la primary key della tabella (es: pkey=”id”) |
name_long |
T |
Indica il name_long («friendly name») della tabella (es: name_long=”Cliente”) |
name_plural |
T |
Permette di indicare il «friendly name» al plurale (es: name_plural=”Clienti”) |
caption_field |
T |
Permette di indicare quale colonna deve essere indicata come etichetta del record |
archivable |
T |
Se impostato a True i record saranno archiviabili tramite l’apposita icona della scatola |
lookup |
B |
Se impostato a True, permette di definire la tabella come tabella di lookup |
checkpref |
T |
Permette di attivare o disattivare l’intera tabella a seconda che nelle preferenze sia indicato o meno tramite un booleano (es: checkpref=”dem.abilita_argomenti”) |
partition_ |
T |
Permette di indicare un criterio per il partizionamento (es: partition_agente_id=”agente_id”). Dopo l’_ è necessario indicare il nome della colonna |
group_ |
T |
Deprecato, sostituito dai colgroups Permette di definire un gruppo di colonne visualizzate nell’albero della vista o delle query, da associare poi nella definizione della singola colonna (es: group_fattreg=”Fatturato per regione”) |
Autore della sezione: Davide Paci