2012-05-03 3 views
0

J'ai essayé d'exécuter cette requête:Debugging GQL Requêtes

my_post = db.GqlQuery("SELECT * FROM Post where __key__ = KEY('Post', 1)") 
self.render("showpost.html", my_post = my_post) 

et mon modèle showpost.html ressemble à ceci:

<div class="post"> 
    <h3 class="post-subject">{{ my_post.subject }}</h3> 
    <div class="post-content">{{ my_post.content }}</div> 
</div 

Au lieu d'obtenir les détails du poste de id=1 Je suis obtenir une page blanche. Bien qu'il existe un post avec id = 1 je ne sais pas comment confirmer si le GQLquery retourne quelque chose. Y-a-t-il un moyen de vérifier? à essayer ce qui suit:

my_post = db.GqlQuery("SELECT * FROM Post where subject = 'hello_world') 
self.render("showpost.html", my_post = my_post) 

je reçois le même numéro (page blanche), même si il est post qui est sujet hello_world

Merci beaucoup

Répondre

2

GqlQuery is a class.
Votre code a créé une instance de la classe GqlQuery.
Pour revenir quelque chose du datastore, vous devez utiliser l'une des méthodes d'instance suivantes:

.fetch() # requires number of entities as first argument 
.get() 

Exemple:

my_query = db.GqlQuery("SELECT * FROM Post WHERE subject = :subject", 
         subject="hello_world") 
my_post = my_query.get() # the magic happens here 
self.render("showpost.html", my_post = my_post) 
2

Bernie est juste que vous devez utiliser .fetch ou .get récupérer réellement résulte de la GqlQuery que vous avez créée, mais pour la première version, où vous avez une clé ou un identifiant, vous ne voulez pas créer de requête du tout. Au contraire, utilisez les méthodes fournies pour les utiliser directement.

Si vous avez une carte d'identité, utilisez:

my_post = Post.get_by_id(id) 

ce sera beaucoup plus rapide que d'utiliser un objet de requête.

Si vous avez une clé entière, utilisez:

my_post = Post.get(key) 

C'est le moyen le plus rapide et le plus efficace pour obtenir une entité de la base de données.

+0

Merci pour ce conseil. Je vais utiliser cela à la place. Merci beaucoup :) – Prakhar