S kódem, který jste poskytli, jsou dva problémy, které vysvětlují, proč získáváte výsledky, které dostáváte.
První problém je, že váš dotaz test.query.filter(url ='.').all()
vrátí prázdný seznam. To vrátí prázdný seznam jednoduše proto, že nemáte platný index pro použití s filtrem, který jste zadali. Pro tento sloupec máte 2 indexy - jedinečný index (užitečný pro vyhledávání adres URL podle přesného řetězce) a index přípony (užitečný pro hledání adres URL, které končí určitým řetězcem) - ale ani jeden nenabízí možnost filtrovat podle toho, co by bylo v relačním světě dotaz „jako“. Index předpony (vytvořený pomocí prefix=True
) vám umožní použít test.query.like(url='*.')
, ale to by bylo velmi pomalé (provádí skenování indexu namísto přímého vyhledávání[1]).
Abychom předešli problémům souvisejícím s indexem/dotazem, jako je tento, přidal jsem výjimky QueryError, když se uživatelé pokoušejí filtrovat svá data podle indexů, které neexistují. Dnes večer s těmito změnami vydám 0.31.4 o něco později.
Druhá chyba, kterou máte a která je příčinou výjimky, je, že voláte .count()
bez argumentu. V bodě vašeho h.count()
volání, type(h) == list
, a objekty seznamu Python vyžadují argument k počítání hodnot rovných zadanému argumentu v seznamu. Pokud jste přeskočili .all()
část vašeho původního dotazu, dostanete objekt dotazu zpět. Tento objekt dotazu má .count()
a vrátí počet odpovídajících výsledků.
[1] Ne všechny „like“ dotazy v ROM jsou pomalé, ale ty, které jsou rychlé, vyžadují předpony bez zástupných znaků, aby se omezily rozsahy dat pro skenování/filtrování.