Istnieją dwa problemy z dostarczonym kodem, które wyjaśniają, dlaczego otrzymujesz wyniki, które otrzymujesz.
Pierwszy problem polega na tym, że zapytanie test.query.filter(url ='.').all()
zwróci pustą listę. Zwróci to pustą listę tylko dlatego, że nie masz prawidłowego indeksu do użycia z określonym filtrem. Masz 2 indeksy dla tej kolumny — unikalny indeks (przydatny do wyszukiwania adresów URL według dokładnego ciągu) i indeks sufiksu (przydatny do wyszukiwania adresów URL, które kończą się określonym ciągiem) — ale żaden z nich nie oferuje możliwości filtrowania według tego, co byłoby w świecie relacyjnym zapytanie „podobne”. Indeks prefiksu (utworzony za pomocą prefix=True
) pozwoli Ci użyć test.query.like(url='*.')
, ale byłoby to bardzo powolne (wykonuje skanowanie indeksu zamiast bezpośredniego wyszukiwania [1]).
Aby zapobiec takim problemom związanym z indeksami/zapytaniami, dodałem wyjątki QueryError, gdy użytkownicy próbują filtrować swoje dane według nieistniejących indeksów. Dzisiejszego wieczoru wydam 0.31.4 nieco później z tymi zmianami.
Drugi błąd, który jest przyczyną wyjątku, polega na tym, że wywołujesz .count()
bez argumentów. W punkcie Twojego h.count()
zadzwoń, type(h) == list
, a obiekty listy Pythona wymagają argumentu do zliczania wartości równych argumentowi podanemu na liście. Jeśli pominąłeś .all()
część oryginalnego zapytania, otrzymasz obiekt zapytania z powrotem. Ten obiekt zapytania ma .count()
metody i zwróci liczbę dopasowanych wyników.
[1] Nie wszystkie zapytania „podobne” w pamięci ROM są powolne, ale te, które są szybkie, wymagają prefiksów innych niż wieloznaczne, aby ograniczyć zakresy danych do skanowania/filtrowania.