استعلام / GQLQUERY .بير () تقييد مجموعة النتائج؟
-
18-09-2019 - |
سؤال
لقد لاحظت فقط نتيجة غريبة من استفسار لدي مشكلة في فهم. يبدو كما لو إضافة طلب () إلى استعلام يحد من النتائج التي أعود إليها.
هنا هو تفاعلي:
>>> SomeModel.all().filter('action =', 'foo').order('created_at').count(),
SomeModel.all().filter('action =', 'foo').count()
(192L, 293L)
>>> SomeModel.all().filter('action =', 'foo').order('created_at').count(),
SomeModel.all().filter('action =', 'foo').count()
(193L, 294L)
كما ترون، لم تتم إضافة مائة كيانات بين الاستفسعين. يبدو أن تعليمات الطلب () تقيم مجموعة النتائج. ولكن created_at
هو خاصية مطلوبة وهي موجودة في جميع الكيانات.
>>> count = 0
>>> for entity in SomeModel.all().filter('action =', 'foo'):
... if not entity.created_at:
... raise Exception, 'Not found!'
... count += 1
...
>>> print count
361
لا استثناءات. فلماذا سوف الاستعلام بالترتيب الذي لا يعيد كل الكيانات؟
أخيرا، التحقيق في ما إذا كانت البيانات السيئة:
>>> print "ascending=%d no-filter=%d descending=%d" % (
SomeModel.all().filter('action =', 'foo').order('created_at').count(),
SomeModel.all().filter('action =', 'foo').count(),
SomeModel.all().filter('action =', 'foo').order('-created_at').count())
ascending=79 no-filter=179 descending=173
المحلول
اختفت المشكلة على الرغم من عدم تغيير التعليمات البرمجية الخاصة بي. أفضل تخمين لدي هو أنه ربما انخفض المؤشر، على الرغم من أنني قد افترض أنني إذا حصلت على عودة ناجحة من وضع () ثم يتم تحديث الفهارس.
لا تنتمي إلى StackOverflow