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.