2010-07-21 10 views
5

मेरे पास मेरे सिस्टम में एक उपयोगकर्ता है जिसने एक ऐसी इकाई बनाई है जिसे मैं पुनर्प्राप्त करना चाहता हूं। मैं filter का उपयोग करके ऐसा करने का प्रयास कर रहा हूं क्योंकि यह gql method पर कॉल से तेज़ होना चाहिए। हालांकि, फ़िल्टर कोई परिणाम नहीं देता है और gql काम करता है।ऐप इंजन का फ़िल्टर बनाम gql विधियों

randy_res = Vote.all().filter('created_by=', randy).fetch(limit=10) 
randy_res = Vote.gql('WHERE created_by=:1', randy) 

वहाँ किसी भी कारण है कि फिल्टर एक खाली सूची और gql कॉल उचित परिणाम वापसी होगी वापसी होगी है?

+3

एक अलग रूप में के रूप में, gql और फिल्टर का उपयोग कर क्वेरी बनाने के लिए की तुलना में अत्यंत तुच्छ होना चाहिए के बीच गति अंतर वास्तव में क्वेरी निष्पादित करने के ऊपरी हिस्से। यदि gql आपके लिए अधिक पठनीय या अधिक सहज है, तो इसके साथ चिपके रहें। –

+3

जितना मैं जीक्यूएल को नापसंद करता हूं, @ ड्रू सही है: कोई भी प्रदर्शन अंतर छोटा है। –

उत्तर

12

filter() का उपयोग करते समय, आप क्षेत्र नाम और ऑपरेटर के बीच एक जगह रखने के लिए आवश्यक हैं। उद्देश्य के अनुसार कार्य करने के लिए अपने filter() कॉल पाने के लिए आपको सिर्फ बराबर के चिह्न से पहले खाली स्थान शामिल करने की जरूरत है:

randy_res = Vote.all().filter('created_by =', randy).fetch(limit=10) 
+1

आह! इसने मुझे रात के लिए पागल बना दिया। मूक विफलताओं में मेरा सबसे बुरा सपना है। मैंने 2 साल पहले एक मुद्दा दायर किया था, लेकिन ऐसा लगता है कि किसी और की परवाह नहीं है (केवल 6 सितारे)। http://code.google.com/p/googleappengine/issues/detail?id=688 –

+0

वाह। आप एक जीवन बचतकर्ता हैं! –

+1

@ पीटर दुर्भाग्यवश, यह एक बग नहीं है: मूल कोड 'बनाया_by =' नाम वाली संपत्ति के लिए एक पूरी तरह से मान्य क्वेरी है, और कोई भी परिवर्तन इस (स्वीकार्य रूप से काफी असामान्य) व्यवहार को तोड़ देगा। –

संबंधित मुद्दे