1

est-il un moyen de remplacer:assorti tous les enregistrements dans une requête datastore

def get_objects(attr1,attr2,..): 
    objects = Entities.all() 

    if attr1 != None: 
     objects.filter('attr1',attr1) 
    if attr2 != None: 
     objects.filter('attr2',attr2) 
    .... 
    return objects 

Avec une seule requête:

Entities.all().filter('attr1',attr1).filter('attr2',attr2) 

En utilisant une sorte de signe « correspondre tous » (peut-être une expression rationnelle requête)? Le problème avec la première requête est que (en plus d'être moche) il crée des index pour toutes les séquences de filtre possibles.

Répondre

1

Le magasin de données ne prend pas en charge les requêtes regex ou les requêtes OU. Toutefois, si vous n'utilisez que des filtres d'égalité, les index ne doivent pas être créés automatiquement; ces types de requêtes peuvent être servis en utilisant une stratégie de fusion-fusion tant que le nombre de filtres reste faible (si vous essayez d'ajouter trop de filtres, vous obtiendrez une erreur indiquant que les index existants ne peuvent pas être utilisés pour exécuter la requête efficacement, cependant, essayer d'ajouter les index requis dans un cas comme celui-ci entraînera généralement le problème des index explosifs.)

La laideur dans la première approche peut probablement être résolue en passant une liste à votre fonction au lieu de variables individuelles, puis en utilisant une liste de compréhension au lieu d'un tas d'instructions if.

+0

Malheureusement, je dois interroger les propriétés datetime afin que non seulement les filtres d'égalité sont utilisés. Merci pour le deuxième conseil. –

Questions connexes