检查ReferenceProperty的原始GQL是什么?

时间:2010-02-17 01:32:02

标签: google-app-engine gql gqlquery

我有以下型号:

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管理数据>运行上述内容。数据查看器>查询数据存储区。我想要有人可以从典型的mysql或psql shell运行的原始SQL。

1 个答案:

答案 0 :(得分:4)

Edit2:啊,用于数据查看器的raw-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