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 .

Parameters:

Parameter name Type Description
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
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_per_agente=agente_id)

Autore della sezione: Davide Paci