Accesso concorrente

In caso di utilizzo contemporaneo del db da parte di più utenti, l’ORM mette a disposizione una serie di strumenti atti a gestire l’accesso concorrente al record.

Il parametro for_update=True

In una qualsiasi Operazione di lettura è possibile richiedere la restituzione del record a scopo di successiva modifica semplicemente passando il parametro for_update=True:

rec_trapano = tbl_prodotto.record(where='$codice=:cod_prod',
                                cod_prod='T1',
                                for_update=True).output('dict')

A questo punto sarà possibile modificare il rec_trapano come segue:

old_record = dict(rec_trapano)
rec_trapano['prezzo_unitario'] = rec_trapano['prezzo_unitario'] * 3

Ed effettuare update e commit come descritto al paragrafo precedente.

Suggerimento

Si noti che prima di effettuare la modifica facciamo una copia del record costruendone un dizionario (old_record). Questo passaggio non è obbligatorio ma è buona consuetudine per innescare determinati eventi di business logic, per esempio nei trigger

Metodi per la modifica di record

Per agevolare la modifica di un record è stato messo a disposizione il metodo recordToUpdate , mentre per la modifica di molti record in contemporanea, è possibile usare la funzione batchUpdate .

Autore della sezione: Davide Paci