आपके द्वारा प्रदान किए गए कोड के साथ दो समस्याएं हैं जो बताती हैं कि आपको जो परिणाम मिलते हैं वह आपको क्यों मिलते हैं।
पहली समस्या यह है कि आपकी क्वेरी test.query.filter(url ='.').all()
एक खाली सूची लौटाएगा। यह केवल एक खाली सूची लौटाएगा क्योंकि आपके पास निर्दिष्ट फ़िल्टर के साथ उपयोग करने के लिए एक वैध अनुक्रमणिका नहीं है। आपके पास उस कॉलम के लिए 2 इंडेक्स हैं - एक अद्वितीय इंडेक्स (सटीक स्ट्रिंग द्वारा यूआरएल देखने के लिए उपयोगी) और एक प्रत्यय इंडेक्स (एक निश्चित स्ट्रिंग के साथ समाप्त होने वाले यूआरएल खोजने के लिए उपयोगी) - लेकिन न तो फ़िल्टर करने की क्षमता प्रदान करते हैं जो होगा संबंधपरक दुनिया में एक 'पसंद' क्वेरी। एक उपसर्ग अनुक्रमणिका (prefix=True
. के साथ बनाया गया) ) आपको test.query.like(url='*.')
. का उपयोग करने देगा , लेकिन यह बहुत धीमा होगा (यह प्रत्यक्ष लुकअप के बजाय एक इंडेक्स स्कैन करता है[1])।
इस तरह की अनुक्रमणिका/क्वेरी-संबंधी समस्याओं को रोकने में मदद करने के लिए, मैंने QueryError अपवाद जोड़े हैं जब उपयोगकर्ता अपने डेटा को अनुक्रमणिका द्वारा फ़िल्टर करने का प्रयास करते हैं जो मौजूद नहीं है। मैं आज रात 0.31.4 बाद में उन परिवर्तनों के साथ रिलीज़ करूँगा।
आपके पास दूसरी त्रुटि है, जो अपवाद का कारण है, वह यह है कि आप .count()
. को कॉल करते हैं बिना तर्क के। आपके h.count()
. के बिंदु पर कॉल, type(h) == list
, और पायथन सूची वस्तुओं को सूची में दिए गए तर्क के बराबर मानों की गणना करने के लिए एक तर्क की आवश्यकता होती है। अगर आपने .all()
छोड़ दिया है आपकी मूल क्वेरी का हिस्सा, आपको एक क्वेरी ऑब्जेक्ट वापस मिल जाएगा। उस क्वेरी ऑब्जेक्ट में एक .count()
है विधि, और मिलान किए गए परिणामों की गिनती लौटाएगा।
[1] रोम में सभी 'पसंद' प्रश्न धीमे नहीं होते हैं, लेकिन जो तेज़ होते हैं उन्हें स्कैन/फ़िल्टर करने के लिए डेटा श्रेणियों को सीमित करने के लिए गैर-वाइल्डकार्ड उपसर्गों की आवश्यकता होती है।