Metodi della query¶
Come abbiamo visto l’esecuzione di una query si limita a creare l’oggetto SqlQuery, ma non eseguirà la query in sé per restituire il risultato. Per questo è necessario fare un passo successivo, ovvero richiederne l’output in una delle seguenti modalità.
Il metodo fetch¶
È la modalità più semplice, che restituisce una lista di dict con i valori risultanti dalla query
myquery.fetch()
[[ragione_sociale=Mario Rossi,pkey=syd9_cQZPm_AxELj3jJKxw],
[ragione_sociale=Giardini e Giardini,pkey=ja14mgX2P2mRQWUNMWcdKg],
[ragione_sociale=Porcari Francesco,pkey=g8pa8wDvMIeQW0R8Chn6ZA],
[ragione_sociale=Rossi Mario,pkey=mf_6EJbWN1unRWkVjRRTgA],
[ragione_sociale=Bianchi Luigino,pkey=pN1YrXqfPyinfCQBQ2qewQ],
[ragione_sociale=Effelunga,pkey=eXTjroRqOLqqaP5Ez4vL0g]]
Il metodo fetchAsDict¶
Sulla base del campo richiesto come chiave restituisce un dizionario di dizionari dove ogni key è il valore del campo e ogni valore è a sua volta il dict contenente le columns
second_query = clienti_tbl.query(columns='$ragione_sociale, $provincia, $email',
where='$email IS NOT NULL',
limit=10,
order_by='$ragione_sociale DESC')
dict_by_email = second_query.fetchAsDict(key='email')
{'giuseppe@verdi.it': [ragione_sociale=Verdi Giuseppe,provincia=PR,email=giuseppe@verdi.it,pkey=mKHYlQVwNJqyrwbXZyAAtg],
'gioac@rossini.it': [ragione_sociale=Rossini Gioacchino,provincia=PU,email=gioac@rossini.it,pkey=GLnTrBCJNbSDR_ksdSgCwA],
'info@rockerduck.it': [ragione_sociale=Rockerduck S.p.a.,provincia=PD,email=info@rockerduck.it,pkey=OyEArIUTNdKfqOUNt9yHeA]}
La particolarità di questa seconda soluzione è che a quel punto la lista dei risultati sarà facilmente raggiungibile dalla key
dict_by_email['giuseppe@verdi.it']
[ragione_sociale=Verdi Giuseppe,provincia=PR,email=giuseppe@verdi.it,pkey=mKHYlQVwNJqyrwbXZyAAtg]
Il metodo fetchGrouped¶
Sulla base della chiave richiesta restituisce un dizionario che ha come chiave la key indicata, e valori la lista delle columns, ma raggruppati sulla base della chiave secondo i criteri indicati nella query (se presenti)
grouped_by_provincia = second_query.fetchGrouped(key='provincia')
grouped_by_provincia['MI']
[[ragione_sociale=Giardini e Giardini,provincia=MI,email=info@giardiniegiardini.it,pkey=ja14mgX2P2mRQWUNMWcdKg],
[ragione_sociale=Effelunga,provincia=MI,email=info@effelunga.it,pkey=eXTjroRqOLqqaP5Ez4vL0g]]
Anche in questo caso trattandosi di un dizionario la lista dei risultati sarà facilmente raggiungibile dalla key.
Il metodo count¶
Invece di restituire i risultati limitarsi a restituire il conteggio degli stessi:
myquery.count()
6
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) |
order_by |
T |
Permette di ordinare i risultati della query sulla base del parametro indicato (es: order_by=”$fatturato_totale DESC”) |
group_by |
T |
Permette di raggruppare i risultati della query sulla base di un determinato criterio (es: group_by=”$cliente_id”) |
limit |
L |
Permette di limitare i risultati della query ai primi n risultati (es: limit=10) |
offset |
L |
Il contrario di limit, permette di escludere i primi n elementi indicati (es: offset=5) |
addPkeyColumn |
B |
Di default True, permette di aggiungere automaticamente la colonna “pkey” ai risultati della query, indipendentemente dalle “columns” indicate (es: addPkeyColumn=False) |
Autore della sezione: Davide Paci