Question

Je les modèles suivants:

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

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

Quelle est la première GQL de trouver toutes les histoires par un auteur. Dans SQL régulière, je vais utiliser les jointures mais je ne pense pas que ce soit disponible dans GQL.

Modifier

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 que le SQL cru que quelqu'un pourrait fonctionner à partir d'un shell mysql ou psql typique.

Était-ce utile?

La solution

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 ceci:

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

Edit: enfin, la première GQL:
(Meilleure façon:. Utilisez le nom de la propriété de backreference implicite, sous la forme « 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top