Je viens de remarquer un résultat étrange d'une requête que j'ai du mal à comprendre. Il semble que si l'ajout d'une commande() à une requête limite les résultats, je reviens à.Query/GqlQuery .order() restreignant le jeu de résultats?
Voici mon interaction:
>>> 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)
Comme vous pouvez le voir, une centaine d'entités ne sont pas ajoutés entre les deux requêtes. Il semble que l'instruction order() limite le jeu de résultats. Mais created_at
est une propriété obligatoire et est présent dans toutes les entités.
>>> count = 0
>>> for entity in SomeModel.all().filter('action =', 'foo'):
... if not entity.created_at:
... raise Exception, 'Not found!'
... count += 1
...
>>> print count
361
Aucune exception. Alors pourquoi la requête avec l'ORDER ne retournerait-elle pas toutes les entités?
Enfin, l'enquête si elle est mauvaise données:
>>> 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
On dirait que je suis toujours à court de 100 entités donc ce peut être de mauvaises données en quelque sorte. Je vais mettre à jour. – JasonSmith
Si au lieu de compter vous utilisez len (SomeModel.all(). Filter ('action =', 'foo'). Order ('created_at') .fetch()), avez-vous toujours le même problème? Si oui, vous pourriez alors essayer de voir quel genre d'entités la commande est en train de tomber. – Bemmu