什么是原始GQL来检查的ReferenceProperty?
-
21-09-2019 - |
题
我有以下型号:
class Author(db.Model):
name = db.StringProperty()
class Story(db.Model):
author = db.ReferenceProperty(Author)
什么是原GQL找到某个作者的所有故事。在常规的SQL,我会用连接,但我不认为在GQL这是可用的。
修改强>
我在寻找原始GQL方式,我知道该怎么做了Python的方式。比如像(以下可能是完全错误的):
"SELECT * FROM Story WHERE author = :1", "Shakespeare"
我想从GAE管理数据>数据查看器运行上述>查询数据存储区。我想生SQL的人可以从一个典型的MySQL或psql的shell中运行。
解决方案
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
不隶属于 StackOverflow