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