2010-02-17 3 views
2

J'ai les modèles suivants:Quel est le GQL brut pour vérifier une ReferenceProperty?

class Author(db.Model): 
    name = db.StringProperty() 

class Story(db.Model): 
    author = db.ReferenceProperty(Author) 

Quelle est la première GQL pour trouver toutes les histoires par un auteur. En SQL normal, j'utiliserai des jointures mais je ne pense pas que ce soit disponible en GQL.

Edit:

Je cherche le chemin de GQL cru, je sais comment faire de la manière Pythonic. Par exemple quelque chose comme (ce qui suit est probablement tout à fait tort):

"SELECT * FROM Story WHERE author = :1", "Shakespeare" 

Je veux exécuter ci-dessus à partir des données d'administration GAE> Data Viewer> Interroger le magasin de données. Je veux le SQL brut que quelqu'un pourrait exécuter à partir d'un shell mysql ou psql typique.

Répondre

4

Edit2: Ah, la GQL première pour une utilisation dans la visionneuse de données ...
Voici une façon:

1) Exécuter ce et obtenir le numéro d'identification:

SELECT * FROM Author where name = 'shakespeare' 

2) en utilisant le numéro d'identification de la requête précédente, exécutez:

SELECT * FROM Story where author = key('Author', 12345) 

Modifier: enfin, le ra w GQL:
(Méthode la plus simple: utilisez le nom de propriété implicite backreference; . Sous la forme de "modelname_set")

qry = GqlQuery("SELECT * FROM Author WHERE name = :1", "shakespeare") 
shakespeare = qry.get() 
shakespeare.story_set # this property now contains all Shakespeare's stories 

ou

qry0 = GqlQuery("SELECT * FROM Author WHERE name = :1", "shakespeare") 
shakespeare = qry0.get() 

qry1 = GqlQuery("SELECT * FROM Story WHERE author = :1", shakespeare.key()) 
shakespeare_stories = qry1.fetch(10) # probably good to have some limit here 

Je préfère cette façon:

qry = Author.all() 
qry.filter('name = ', 'shakespeare') 
shakespeare = qry.get() 

shakespeare.story_set # this property now contains all Shakespeare's stories 

La façon plus impliquée peut parfois être nécessaire:

qry0 = Author.all() 
qry0.filter('name = ', 'shakespeare') 
shakespeare = qry0.get() 

qry1 = Story.all() 
qry1.filter('author = ', shakespeare.key()) 
shakespeare_stories = qry1.fetch(10) # probably good to have some limit here 
+0

Je suis à la recherche de la méthode GQL brute, je sais la faire de façon Pythonienne. –

+0

@Thierry: En effet vous êtes; veuillez voir la réponse éditée ci-dessus. – bernie

+0

Je cours le GQL à partir de la visionneuse de données, il vous donne une fenêtre où vous pouvez exécuter des requêtes. Je ne pense pas pouvoir exécuter du code Python à partir de là. –

Questions connexes