sql >> Database teknologi >  >> NoSQL >> Redis

At få alle python-rom-objekter på en liste

Der er to problemer med den kode, du har angivet, som forklarer, hvorfor du får de resultater, du får.

Det første problem er, at din forespørgsel test.query.filter(url ='.').all() vil returnere en tom liste. Dette vil returnere en tom liste, simpelthen fordi du ikke har et gyldigt indeks, der skal bruges med det filter, du har angivet. Du har 2 indekser for den kolonne - et unikt indeks (nyttigt til at slå webadresser op efter nøjagtig streng) og et suffiksindeks (nyttigt til at finde webadresser, der ender med en bestemt streng) - men ingen af ​​dem giver mulighed for at filtrere efter, hvad der ville være i den relationelle verden en 'like'-forespørgsel. Et præfiksindeks (oprettet med prefix=True ) ville lade dig bruge test.query.like(url='*.') , men det ville være meget langsomt (det laver en indeksscanning i stedet for direkte opslag[1]).

For at hjælpe med at forhindre indeks-/forespørgselsrelaterede problemer som dette, har jeg tilføjet QueryError-undtagelser, når brugere forsøger at filtrere deres data efter indekser, der ikke eksisterer. Jeg udgiver 0.31.4 lidt senere i aften med disse ændringer.

Den anden fejl du har, som er årsagen til undtagelsen, er at du kalder .count() uden et argument. På punktet af din h.count() opkald, type(h) == list , og Python-listeobjekter kræver et argument for at tælle værdier svarende til det angivne argument på listen. Hvis du sprang .all() over del af din oprindelige forespørgsel, ville du få et forespørgselsobjekt tilbage. Dette forespørgselsobjekt har en .count() metode, og ville returnere en optælling af matchede resultater.

[1] Ikke alle "like"-forespørgsler i rom er langsomme, men dem, der er hurtige, kræver præfikser uden jokertegn for at begrænse dataområder til scanning/filtrering.




  1. MongoDB $dateFromParts

  2. Redis - nogen måde at udløse en hændelse, når en værdi ikke længere bliver skrevet aktivt til?

  3. MongoDB $asin

  4. MongoDB $rand