Ada dua masalah dengan kode yang Anda berikan yang menjelaskan mengapa Anda mendapatkan hasil yang Anda dapatkan.
Masalah pertama adalah kueri Anda test.query.filter(url ='.').all()
akan mengembalikan daftar kosong. Ini akan mengembalikan daftar kosong hanya karena Anda tidak memiliki indeks yang valid untuk digunakan dengan filter yang telah Anda tentukan. Anda memang memiliki 2 indeks untuk kolom itu - indeks unik (berguna untuk mencari url dengan string yang tepat) dan indeks sufiks (berguna untuk menemukan url yang diakhiri dengan string tertentu) - tetapi tidak ada yang menawarkan kemampuan untuk memfilter menurut apa yang akan menjadi di dunia relasional permintaan 'suka'. Indeks awalan (dibuat dengan prefix=True
) akan memungkinkan Anda menggunakan test.query.like(url='*.')
, tapi itu akan sangat lambat (melakukan pemindaian indeks alih-alih pencarian langsung[1]).
Untuk membantu mencegah masalah terkait indeks/kueri seperti ini, saya telah menambahkan pengecualian QueryError ketika pengguna mencoba memfilter data mereka dengan indeks yang tidak ada. Saya akan merilis 0.31.4 sedikit nanti malam dengan perubahan tersebut.
Kesalahan kedua yang Anda miliki, yang merupakan penyebab pengecualian, adalah Anda memanggil .count()
tanpa argumen. Pada titik h.count()
. Anda panggil, type(h) == list
, dan objek daftar Python memerlukan argumen untuk menghitung nilai yang sama dengan argumen yang disediakan dalam daftar. Jika Anda melewatkan .all()
bagian dari kueri asli Anda, Anda akan mendapatkan kembali objek kueri. Objek kueri itu memiliki .count()
metode, dan akan mengembalikan hitungan hasil yang cocok.
[1] Tidak semua kueri 'suka' di rom lambat, tetapi kueri yang cepat memerlukan awalan non-karakter pengganti untuk membatasi rentang data yang akan dipindai/difilter.