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 管理者の [データ] > [データ ビューアー] > [データストアのクエリ] から実行したいと考えています。誰かが典型的な mysql または psql シェルから実行できる生の SQL が必要です。

4

1 に答える 1

4

Edit2: ああ、データ ビューアーで使用する生の GQL です
。1 つの方法を次に示します。

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 に答える