.. _orm_genropy/orm_genropy/lettura/query/query_metodi: Metodi della query ================== Come abbiamo visto l'esecuzione di una :ref:`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 .. raw:: html
**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) | +------------------------+------+--------------------------------------------------+ .. sectionauthor:: Davide Paci