2011-07-01 1 views
0

Note: cet exemple est simplement représentatif du problème, pas un vrai cas d'utilisationGoogle App Engine - Rechercher uniquement pour un champ

Je voudrais savoir si j'ai certains objets, par exemple voiture et CarCategory :

Owner 
    - name 
    - age 

Car 
    - name 
    - brand 
    - category(reference) 
    - owner (reference) 

CarCategory 
    - name 
    - property 

Puis-je effectuer une requête pour un certain champ?

Par exemple CarCategory:

requête = GqlQuery ("SELECT catégorie de la voiture")

Je reçois cette erreur: BadQueryError: Erreur d'analyse: pas de symboles attendu supplémentaires arobase voiture

Mise à jour: si vous voulez avoir une liste de toutes les catégories appartenant à un utilisateur

Je voudrais le faire de la manière la plus efficace possible.

Répondre

1

Vous ne pouvez pas interroger des champs individuels dans la banque de données App Engine. Les entités sont stockées et récupérées en tant que tampons de protocole sérialisés dans leur intégralité, il n'y a donc aucun moyen de récupérer uniquement certains champs. Compte tenu de l'abstraction db.Model, il n'y aurait pas de moyen sensé de représenter les données renvoyées, soit - vous ne pouvez pas simplement fournir un modèle avec seulement quelques champs remplis, car cela pourrait violer les contraintes, et causerait certainement des problèmes si vous avez essayé de le stocker dans le magasin de données!

En réponse à votre mise à jour: Cela nécessiterait traditionnellement une jointure et un agrégat, qui ne sont pas pris en charge sur App Engine. Votre meilleure option est de rechercher et de récupérer toutes les entités Car d'un utilisateur et de les classer par propriété Category.

1

On dirait que vous avez plus d'options ici que le tri par vous-même. Vous pouvez créer un nom de clé unique pour chacune de vos catégories, par exemple "Bronco" ou aller avec une clé créée unique "8HJ876KKL" (peut-être créée par uuid). Ensuite, dans l'entité Car, vous pouvez avoir une StringProperty avec le nom de la clé de la catégorie. Vous pourriez en faire un StringListProperty si vous voulez que les voitures appartiennent à plus d'une catégorie. Vous pouvez ensuite interroger sur la catégorie par nom_clé.

Une autre option consiste à utiliser ReferenceProperty dans Car pour pointer vers un objet Category. Ensuite, vous pouvez interroger sur la clé exacte lorsque vous trouvez chaque voiture qui appartient à une catégorie.

Je ne suis pas sûr de l'efficacité des requêtes sur ReferenceProperty vs StringProperty vs StringListProperty.