record e readColumns¶
Se sappiamo che il risultato della nostra operazione di interrogazione sarà un unico record che siamo interessati a leggere o modificare, Genropy ci offre uno strumento semplificato, la record
:
cliente_rec = tbl_cliente.record(cliente_id, for_update=True).output('bag')
In questo caso individuo il record direttamente dalla sua id
, ma avremmo potuto passare qualsiasi altro parametro che conducesse ad un risultato univoco, ad es:
bot = self.db.table('genrobot.bot').record(api_token=token, ignoreDuplicate=True, ignoreMissing=True).output('record')
Suggerimento
Si noti che con il parametro ignoreMissing=True
evitiamo di mandare il sistema in errore in caso di mancanza di un risultato, mentre con ignoreDuplicate=True
evitiamo l’errore in caso ci fosse più di un risultato (scegliendo come unico valido il primo presentato).
Il metodo record
non ritorna direttamente i dati, ma è necessario richiederne l’output sotto forma di:
.output('bag')
.output('dict')
.output('record')
Il metodo ritornerà solo le colonne «vere» del record, ad esclusione quindi delle Colonne virtuali (a meno che non venga specificato il parametro virtual_columns
come descritto nella sezione dedicata).
Una record abbreviata: readColumns¶
Restituisce l’elenco dei valori di colonna risultanti da una tradizionale query sql di tipo SELECT.
Di fatto è come fare una query con questi valori di default:
where, pkeys e columns
limit=1
addPkeyColumn=False
excludeDraft=False
ignorePartition=True
excludeLogicalDeleted=False
La sintassi della readColumns è la seguente:
totale_lordo, totale_iva = self.db.table('fatt.fattura_riga').readColumns(columns="""SUM($prezzo_totale) AS totale_lordo,
SUM($iva) AS totale_iva""", where='$fattura_id=:f_id', f_id=fattura_id)
Parametri:
Nome parametro |
Tipo |
Descrizione |
---|---|---|
where |
T |
Permette di indicare la condizione «where» che individuerà i record oggetto della query (es: where=”$id=#THIS.id”) |
pkey |
T |
Alternativamente alla where permette di fornire una pkey come criterio di ricerca (es: pkey=medico_id) |
columns |
T |
Permette di indicare le colonne da restituire come risultato dell’interrogazione (es: columns=”$fattura_id,$protocollo,$cliente_id”) |
for_update |
B |
Se impostato a True il risultato della query sarà predisposto per la modifica tramite un’operazione di update (es: for_update=True) |
excludeDraft |
B |
Di default True, se impostato a False permette di includere nei risultati gli status «Bozza» (es: excludeDraft=False) |
excludeLogicalDeleted |
B |
Di default True, se impostato a False permette di includere nei risultati i record archiviati o eliminati (es: excludeDraft=False) |
mode |
T |
Permette di specificare l’output tra “bag”, “dict”, “json” e “record”. Es: mode=”bag” equivale a specificare .output(“bag”) |
virtual_columns |
T |
Permette di aggiungere una serie di colonne virtuali (aliasColumn, formulaColumn) che altrimenti non verrebbero considerate nel record (es: virtual_columns=”$n_fatture,$tot_fatturato”) |
eager |
B |
|
ignoreMissing |
B |
Se impostato a True restituisce un record di valori nulli in caso di record non corrispondente alla ricerca effettuata, invece di restituire un errore (es: ignoreMissing=True) |
ignoreDuplicate |
B |
Se impostato a True verranno ignorati eventuali valori duplicati individuati e verrà considerato solo il primo (es: ignoreDuplicate=True) |
lazy |
B |
Autore della sezione: Davide Paci