Operazioni di scrittura

Creare un nuovo record

La Tabella implementa un metodo insert che riceve in modo polimorfico o un dizionario o una bag contenente i dati del nuovo record.

nuovo_prodotto = dict(codice='TTFFG', descrizione='Prodotto Nuovo')
tbl_prodotto.insert(nuovo_prodotto)
mydb.commit()

È quindi possibile passare al metodo insert un dizionario o una Bag con chiavi le colonne della tabella, e valori i valori del record che stiamo inserendo.

Suggerimento

Se guardiamo il record dopo il nuovo inserimento, noteremo che non sono state popolate solo le colonne da noi inserite, ma anche una serie di Colonne di sistema , ovviamente se presenti nella configurazione della Tabella.

Si noti che è possibile passare nella insert anche la primary key, in quel caso verrà effettuato un check in merito all’esistenza o meno della primary key nel database. Se invece si utilizza l” id di sistema di Genropy e questo viene omesso, sarà l’ORM a invocare in autonomia il metodo pkeyValue per generare una nuova primary key:

print (nuovo_prodotto)

{'codice': 'TTFFG', 'descrizione': 'Prodotto Nuovo', 'id': 'KCdaL3JIMful1fXF4mB11A', '__ins_ts': datetime.datetime(2020, 6, 10, 10, 22, 26, 483704), '__mod_ts': datetime.datetime(2020, 6, 10, 10, 22, 26, 483737), '__ins_user': None}

Suggerimento

Utilizzando il metodo raw_insert al posto del semplice insert sarà possibile eseguire l’operazione di creazione del record senza innescare i Trigger della tabella su cui si sta operando

Il metodo newrecord

Genropy mette a disposizione una procedura alternativa alla procedura standard di inserimento di un dizionario o di una Bag, il metodo newrecord:

nuova_fattura = self.db.table('fatt.fattura').newrecord(data=self.db.workdate, cliente_id=cliente)
self.db.table('fatt.fattura').insert(nuova_fattura)
self.db.commit()

Anche in questo caso il metodo newrecord crea un record nella tabella individuata, popolando automaticamente i sysFields. La differenza è che in questo caso verranno anche considerati i valori predefiniti , inoltre il newrecord generato avrà tutte le colonne del record, anche non precedentemente valorizzate.

Suggerimento

Se non valorizzate, le colonne del newrecord così creato esisteranno, e saranno uguali a None: possono quindi esserci differenze di comportamento in fase di inserimento di un record con questa metodologia rispetto a quanto avviene con dizionari e Bag, soprattutto in caso di meccanismi di controllo nei Trigger .

commit

Al termine di una qualsiasi procedura di inserimento o di modifica di uno o più record è necessario procedere con il commit sul database, ovvero il momento in cui la transazione viene effettivamente eseguita e il record viene reso disponibile a tutti dopo la modifica sul database. In caso contrario la modifica rimarrà invece sul client e non sarà mai trasferita al database.

self.db.commit()

Autore della sezione: Davide Paci