.. _orm_genropy/orm_genropy/scrittura/update/batchUpdate: batchUpdate =========== La ``batchUpdate`` è una funzione messa a disposizione da Genropy per accorciare l'operazione di *update* di **molti record risultato di una query**: in questo modo, invece di ripetere l'operazione di modifica per *ogni* singolo record risultato della query, è possibile effettuare la modifica su tutti i record contemporaneamente. Quindi, ad esempio, invece di applicare la modifica all'interno di un ciclo *for*:: prodotti = tbl_prodotto.query(where='$descrizione ILIKE :desc' , desc='Tavolo%', for_update = True).fetch() for p in prodotti: old_rec = dict(p) p['prezzo_unitario'] = 49 tbl_prodotto.update(p, old_rec) È possibile sfruttare la *batchUpdate*:: tbl_prodotto.batchUpdate( dict(prezzo_unitario = 49), where='$descrizione ILIKE :desc', desc='Tavolo%') In questo caso stiamo passando al metodo un **updater "statico" sotto forma di dizionario** contenente il nuovo campo, mentre in casi più complessi è possibile passare alla *batchUpdate* un **updater "dinamico" sotto forma di metodo** *callback* definito precedentemente:: def myupdater(rec): if rec['prezzo_unitario'] < 100: rec['prezzo_unitario'] = rec['prezzo_unitario'] + 11 else: rec['prezzo_unitario'] = rec['prezzo_unitario'] - 5 updated_pkeys = tbl_prodotto.batchUpdate(myupdater, where='$descrizione ILIKE :desc', desc='Tavolo%') mydb.commit() Come in una qualsiasi :ref:`Operazione di lettura` la *batchUpdate* può ricevere, alternativamente alla condizione *where*, una lista di ``pkeys``, così come possono essere **richieste delle colonne specifiche** necessarie poi all'interno del metodo *updater*:: updated_pkeys = tbl_prodotto.batchUpdate(myupdater, where='$descrizione ILIKE :desc', columns='*,@classe_iva.aliquota, desc='Tavolo%') .. hint:: Arricchendo la ``batchUpdate`` con l'attributo ``ignoreMissing=True``, evitiamo di mandare il sistema in errore in caso mancassero record da aggiornare, mentre con ``_raw_update=True`` verrà effettuato l'update ignorando eventuali :ref:`Trigger` Al termine dell'operazione ritornerà comunque sempre le *pkeys* dei record modificati. .. raw:: html
**Parametri:** +------------------------+------+--------------------------------------------------+ | Nome parametro | Tipo | Descrizione | +========================+======+==================================================+ |for_update |B |Eseguendo una qualsiasi operazione di lettura con | | | |questo parametro verrà restituito come risultato | | | |un record pronto per la modifica | +------------------------+------+--------------------------------------------------+ |where |T |La where per l'individuazione del record | +------------------------+------+--------------------------------------------------+ |pkeys |T |La lista delle pkeys dei record da modificare | +------------------------+------+--------------------------------------------------+ |_raw_update |B |È possibile utilizzare il parametro | | | |_raw_update=True per evitare di innescare dei | | | |trigger durante l'operazione di update | +------------------------+------+--------------------------------------------------+ |cb |T |La batchUpdate può ricevere un metodo di callback | | | |o un dizionario con le operazioni di modifica da | | | |effettuare | +------------------------+------+--------------------------------------------------+ .. sectionauthor:: Davide Paci