Redis
 sql >> база данни >  >> NoSQL >> Redis

Получаване на всички python-rom обекти в списък

Има два проблема с предоставения от вас код, които обясняват защо получавате резултатите, които получавате.

Първият проблем е, че вашата заявка test.query.filter(url ='.').all() ще върне празен списък. Това ще върне празен списък, просто защото нямате валиден индекс, който да се използва с филтъра, който сте посочили. Имате 2 индекса за тази колона - уникален индекс (полезен за търсене на URL адреси по точен низ) и индекс на суфикс (полезен за намиране на URL адреси, които завършват с определен низ) - но нито един от тях не предлага възможност за филтриране по това, което би било в релационния свят заявка „харесвам“. Индекс на префикс (създаден с prefix=True ) ще ви позволи да използвате test.query.like(url='*.') , но това би било много бавно (прави индексно сканиране вместо директно търсене[1]).

За да предотвратя проблеми, свързани с индекс/заявка като този, добавих изключения за QueryError, когато потребителите се опитват да филтрират данните си по индекси, които не съществуват. Ще пусна 0.31.4 малко по-късно тази вечер с тези промени.

Втората грешка, която имате, която е причината за изключението, е, че извиквате .count() без спор. В точката на вашия h.count() повикване, type(h) == list , и списъчните обекти на Python изискват аргумент за преброяване на стойности, равни на предоставения аргумент в списъка. Ако сте пропуснали .all() част от оригиналната си заявка, ще получите обратно обект на заявка. Този обект на заявка има .count() метод и ще върне броя на съвпадащите резултати.

[1] Не всички заявки за „харесване“ в ROM са бавни, но тези, които са бързи, изискват префикси без заместващи знаци, за да ограничат диапазоните от данни за сканиране/филтриране.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да съхранявате обобщен резултат от търсене в дърво на каталога в Redis

  2. Въпроси за Redis и Node.js и Socket.io

  3. Грешка:Не можа да се свърже с Redis при redis:6379:Името или услугата не са известни

  4. инсталирайте redis на aws micro екземпляр

  5. Свързване с Redis, работещ в Docker контейнер от хост машина