2010-01-16 2 views
1

J'ai une base de données productpart contenant une propriété de type chaîne appelée 'type'. Ce que j'essaie de faire est d'obtenir tous les produits par un type donné (parfois plus d'un type).GAE: Création de plusieurs requêtes en une seule

J'ai essayé d'utiliser la méthode de filtre GAE, mais je n'arrive pas à la faire fonctionner correctement.

La seule solution que j'ai pour travailler est de créer un nouveau fichier db.GqlQuery pour chaque type.

La raison pour laquelle je dois aller chercher par type est de les afficher dans différents 's du côté client?

Existe-t-il un moyen d'utiliser une seule requête pour cela?

il ressemble actuellement à ceci:

productPartsEntries = { 
          'color' : db.GqlQuery("SELECT * FROM ProductParts WHERE type = :type", type = 'color'), 
          'style' : db.GqlQuery("SELECT * FROM ProductParts WHERE type = :type", type = 'style'), 
          'size' : db.GqlQuery("SELECT * FROM ProductParts WHERE type = :type", type = 'size') 
// add more.... 
} 

..fredrik

Répondre

2

Vous pouvez utiliser l'opérateur IN. Il créerait les trois requêtes différentes et regrouperait les résultats pour vous dans les coulisses. Voir le docs:

GQL n'a pas d'opérateur OR. Cependant, il possède un opérateur IN, qui fournit une forme limitée de OU.

L'opérateur IN compare la valeur d'une propriété à chaque élément d'une liste. L'opérateur IN est équivalent à plusieurs = requêtes, une pour chaque valeur, qui sont ensemble. Une entité dont la valeur pour la propriété donnée est égale à les valeurs dans la liste peut être renvoyé pour la requête.

Remarque: Les opérateurs IN et! = Utilisent plusieurs requêtes dans les coulisses. Par exemple, l'opérateur IN exécute une requête de magasin de données sous-jacente distincte pour chaque élément de la liste. Les entités renvoyées résultent du produit croisé de toutes les requêtes de banque de données sous-jacentes et sont dédupliquées. Un maximum de 30 requêtes de magasin de données est autorisé pour toute requête GQL unique .

+0

Est-ce que ProductParts.gql ("WHERE type =: type", type = "color") ne serait pas identique à l'utilisation d'une requête entière? – fredrik

+0

Oui, cela créerait la requête gql pour vous, mais vous pouvez aussi faire 'p = ProductParts.gql (" WHERE type IN: types ", types = [" couleur "," style "," taille "])' – jbochi

Questions connexes