我刚刚注意到一个我无法理解的查询的奇怪结果。似乎将 order() 添加到 Query 限制了我得到的结果。
这是我的互动:
>>> 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)
如您所见,两个查询之间没有添加一百个实体。似乎 order() 指令限制了结果集。Butcreated_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
没有例外。那么为什么使用 ORDER 的查询不会返回所有实体呢?
最后,调查是否是坏数据:
>>> 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