74

Google App EngineデータビューアでGQLを使用してエンティティキーに対してクエリを作成するにはどうすればよいですか?

ビューアーでは、最初の列(Id / Name)はとして表示されname=_1、詳細ビューでは、キーは次のように表示されます。

Decoded entity key: Programme: name=_1
Entity key: agtzcG9................... 

このクエリは機能しません:

SELECT * FROM Programme where name = '_1'
4

5 に答える 5

108

エンティティのキ​​ーを使用して取得できます。

SELECT * FROM Programme where __key__ = KEY('agtzcG9...................')

また、同様に名前を使用してクエリを実行できるはずです。

SELECT * FROM Programme where __key__ = KEY(Programme, '_1')

これは、AppEngineアプリケーションで実行したいことではないことに注意してください。ニックがコメントで述べているように、それは時間の大きな無駄です。実際、この例は、管理コンソールでキーを使用してクエリを実行する方法を示すためにのみ有効です。

于 2010-01-04T14:13:32.070 に答える
20

数値IDの場合、名前によるクエリと同様の形式が機能します。

SELECT * from Programme where __key__ = KEY('Programme', 1234567)

このフォームは、管理コンソールで特に便利です。

于 2011-06-02T04:38:08.427 に答える
18

キーでエンティティを取得するためにクエリを実行する必要はまったくありません。キーでエンティティを取得するだけです。Pythonでは、これをで行うことができますMyModel.get_by_key_name('_1')。これは、クエリを使用するというAdamの提案よりも3〜5倍高速です。

于 2010-01-06T21:38:27.137 に答える
2

キーでクエリを実行する場合は、IDや名前だけでなく、親も含めてキーを正確に一致させる必要があります。もちろん、上記の例のように親がnullの場合は、IDまたは名前とエンティティのタイプで十分です。

すでにエンコードされたエンティティキーがある場合は、次のように使用できます。

SELECT * FROM Programme where __key__ = KEY('agtzcG9...................')

上記の簡単な例では、

SELECT * FROM Programme where __key__ = KEY('Programme', '_1')

できますが、キーに親がある場合は、

Paren: id=123

次に、クエリは次のようになります

SELECT * FROM Programme where __key__ = KEY('Paren', 123, 'Programme', '_1')

親自体に親がある場合は、それも追加する必要があります。詳細については、公式のGQLドキュメントを参照してください。

親に関係なく、同じIDまたは名前を持つすべてを選択する方法はないようです。

于 2014-07-02T23:01:10.277 に答える
1

これについて簡単に説明します。KEYの引数の前後に引用符を使用すると、呼び出しが失敗します(管理コンソールでエラーポップアップが表示されます)。

たとえば、ID / Name12345のタイプ「mytype」の場合、これは機能しません

SELECT * FROM mytype WHERE __key__ = KEY('mytype', '12345')

しかし、これはします:

SELECT * FROM mytype WHERE __key__ = KEY(mytype, 12345)
于 2015-05-15T21:55:12.160 に答える