Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Obtendo todos os objetos python-rom em uma lista


Há dois problemas com o código que você forneceu que explicam por que você obtém os resultados que obtém.

O primeiro problema é que sua consulta test.query.filter(url ='.').all() retornará uma lista vazia. Isso retornará uma lista vazia simplesmente porque você não tem um índice válido para ser usado com o filtro que você especificou. Você tem 2 índices para essa coluna - um índice exclusivo (útil para procurar urls por string exata) e um índice de sufixo (útil para encontrar urls que terminam com uma determinada string) - mas nenhum deles oferece a capacidade de filtrar pelo que seria no mundo relacional uma consulta 'like'. Um índice de prefixo (criado com prefix=True ) permitiria que você usasse test.query.like(url='*.') , mas isso seria muito lento (faz uma varredura de índice em vez de pesquisa direta[1]).

Para ajudar a evitar problemas relacionados ao índice/consulta como esse, adicionei exceções QueryError quando os usuários tentam filtrar seus dados por índices que não existem. Estarei liberando 0.31.4 um pouco mais tarde hoje à noite com essas mudanças.

O segundo erro que você tem, que é a causa da exceção, é que você chama .count() sem argumento. No ponto de seu h.count() call, type(h) == list , e objetos de lista do Python requerem um argumento para contar valores iguais ao argumento fornecido na lista. Se você pulou o .all() parte de sua consulta original, você obteria um objeto de consulta de volta. Esse objeto de consulta tem um .count() e retornaria uma contagem de resultados correspondentes.

[1] Nem todas as consultas 'like' em rom são lentas, mas aquelas que são rápidas requerem prefixos não curinga para limitar os intervalos de dados para varredura/filtragem.