sql >> Databasteknik >  >> NoSQL >> Redis

Få alla python-rom-objekt i en lista

Det finns två problem med koden du har angett som förklarar varför du får de resultat du får.

Det första problemet är att din fråga test.query.filter(url ='.').all() kommer att returnera en tom lista. Detta kommer att returnera en tom lista bara för att du inte har ett giltigt index som ska användas med det filter du har angett. Du har två index för den kolumnen - ett unikt index (användbart för att slå upp webbadresser efter exakt sträng) och ett suffixindex (användbart för att hitta webbadresser som slutar med en viss sträng) - men inget av dem erbjuder möjligheten att filtrera efter vad som skulle vara i relationsvärlden en "gilla"-fråga. Ett prefixindex (skapat med prefix=True ) låter dig använda test.query.like(url='*.') , men det skulle vara väldigt långsamt (det gör en indexsökning istället för direktsökning[1]).

För att förhindra index-/frågerelaterade problem som detta har jag lagt till QueryError-undantag när användare försöker filtrera sina data efter index som inte finns. Jag kommer att släppa 0.31.4 lite senare ikväll med dessa ändringar.

Det andra felet du har, som är orsaken till undantaget, är att du anropar .count() utan argument. Vid punkten av din h.count() anrop, type(h) == list , och Python listobjekt kräver ett argument för att räkna värden lika med det angivna argumentet i listan. Om du hoppade över .all() del av din ursprungliga fråga, skulle du få tillbaka ett frågeobjekt. Det frågeobjektet har en .count() metod och skulle returnera ett antal matchade resultat.

[1] Inte alla "gilla"-frågor i ROM är långsamma, men de som är snabba kräver prefix som inte är jokertecken för att begränsa dataintervall för att skanna/filtrera.




  1. zmq vs redis för pub-sub-mönster

  2. Hur använder man MongoDB-aggregation för paginering?

  3. Vårdata mongodb stänger inte mongodb-anslutningar

  4. Hur grupperar man date kvartalsvis?