sql >> Base de Datos >  >> NoSQL >> Redis

Obtener todos los objetos python-rom en una lista

Hay dos problemas con el código que ha proporcionado que explican por qué obtiene los resultados que obtiene.

El primer problema es que su consulta test.query.filter(url ='.').all() devolverá una lista vacía. Esto devolverá una lista vacía simplemente porque no tiene un índice válido para usar con el filtro que ha especificado. Tiene 2 índices para esa columna:un índice único (útil para buscar URL por cadena exacta) y un índice de sufijo (útil para encontrar URL que terminan con una cadena determinada), pero ninguno ofrece la capacidad de filtrar por lo que sería en el mundo relacional una consulta 'me gusta'. Un índice de prefijo (creado con prefix=True ) te permitiría usar test.query.like(url='*.') , pero eso sería muy lento (hace un escaneo de índice en lugar de una búsqueda directa[1]).

Para ayudar a prevenir problemas relacionados con el índice/consulta como este, he agregado excepciones de QueryError cuando los usuarios intentan filtrar sus datos por índices que no existen. Publicaré 0.31.4 un poco más tarde esta noche con esos cambios.

El segundo error que tienes, que es la causa de la excepción, es que llamas a .count() sin argumento En el punto de su h.count() llamada, type(h) == list y los objetos de lista de Python requieren un argumento para contar valores iguales al argumento proporcionado en la lista. Si te saltaste el .all() parte de su consulta original, recuperaría un objeto de consulta. Ese objeto de consulta tiene un .count() y devolvería un recuento de resultados coincidentes.

[1] No todas las consultas 'me gusta' en rom son lentas, pero las que son rápidas requieren prefijos que no sean comodines para limitar los rangos de datos para escanear/filtrar.