Има два проблема с предоставения от вас код, които обясняват защо получавате резултатите, които получавате.
Първият проблем е, че вашата заявка 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 са бавни, но тези, които са бързи, изискват префикси без заместващи знаци, за да ограничат диапазоните от данни за сканиране/филтриране.