سؤال

لقد لاحظت فقط نتيجة غريبة من استفسار لدي مشكلة في فهم. يبدو كما لو إضافة طلب () إلى استعلام يحد من النتائج التي أعود إليها.

هنا هو تفاعلي:

>>> 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
هل كانت مفيدة؟

المحلول

اختفت المشكلة على الرغم من عدم تغيير التعليمات البرمجية الخاصة بي. أفضل تخمين لدي هو أنه ربما انخفض المؤشر، على الرغم من أنني قد افترض أنني إذا حصلت على عودة ناجحة من وضع () ثم يتم تحديث الفهارس.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top