2

我有以下型号:

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

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

查找某个作者的所有故事的原始 GQL 是什么。在常规 SQL 中,我将使用连接,但我认为 GQL 中不可用。

编辑:

我正在寻找原始的 GQL 方式,我知道如何以 Pythonic 方式进行操作。例如类似的东西(以下可能完全错误):

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

我想从 GAE admin Data > Data Viewer > Query the Datastore 运行上述内容。我想要有人可以从典型的 mysql 或 psql shell 运行的原始 SQL。

4

1 回答 1

4

Edit2:啊,用于数据查看器的原始 GQL ......
这是一种方法:

1)运行它并获取ID号:

SELECT * FROM Author where name = 'shakespeare'

2) 使用之前查询中的 ID 号,运行以下命令:

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

编辑:最后,原始 GQL:(
最简单的方法:使用隐式反向引用属性名称;以“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

或者

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

我更喜欢这种方式:

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

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

有时可能需要更复杂的方式:

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
于 2010-02-17T02:05:24.807 回答