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.