Redis
 sql >> Database >  >> NoSQL >> Redis

Ottenere tutti gli oggetti python-rom in un elenco

Ci sono due problemi con il codice che hai fornito che spiegano perché ottieni i risultati che ottieni.

Il primo problema è che la tua query test.query.filter(url ='.').all() restituirà un elenco vuoto. Questo restituirà un elenco vuoto semplicemente perché non hai un indice valido da utilizzare con il filtro che hai specificato. Hai 2 indici per quella colonna:un indice univoco (utile per cercare gli URL per stringa esatta) e un indice suffisso (utile per trovare URL che terminano con una determinata stringa) - ma nessuno dei due offre la possibilità di filtrare in base a ciò che sarebbe nel mondo relazionale una query 'mi piace'. Un indice di prefisso (creato con prefix=True ) ti consente di utilizzare test.query.like(url='*.') , ma sarebbe molto lento (esegue una scansione dell'indice invece della ricerca diretta[1]).

Per aiutare a prevenire problemi relativi all'indice/alla query come questo, ho aggiunto le eccezioni QueryError quando gli utenti tentano di filtrare i propri dati in base a indici che non esistono. Rilascerò la 0.31.4 un po' più tardi stasera con queste modifiche.

Il secondo errore che hai, che è la causa dell'eccezione, è che chiami .count() senza un argomento. Al punto del tuo h.count() chiamata, type(h) == list e gli oggetti elenco Python richiedono un argomento per contare i valori uguali all'argomento fornito nell'elenco. Se hai saltato il .all() parte della tua query originale, otterresti un oggetto query. Quell'oggetto query ha un .count() metodo e restituirebbe un conteggio dei risultati corrispondenti.

[1] Non tutte le query "mi piace" nella rom sono lente, ma quelle veloci richiedono prefissi non jolly per limitare gli intervalli di dati da scansionare/filtrare.