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 object

  • ridefiniamo un metodo obbligatorio config_db, dove andiamo a specificare tutti gli attributi della tabella, innanzitutto il name (solitamente implicito, al primo posto), la pkey (ovvero la chiave primaria), e una serie di altri attributi facoltativi

  • aggiungiamo 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