web-dev-qa-db-ja.com

データストアビューアでの数値IDを使用したGQLクエリ

数値IDを使用してオブジェクトを取得するGQLクエリを作成したいと思います。アプリ管理コンソールのデータストアビューアでこれを行っているため、Model.get_by_id(numeric_id)を使用できません。何かのようなもの

SELECT * FROM Model WHERE id = <numeric_id>

また、動作しません。

35
Pawel Markowski

これを試して:

SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>)
76
Saxon Druce

残念ながら、同等のクエリを作成する方法はないようです。

SELECT * FROM Model WHERE id = <numeric_id>

これにより、指定されたIDを持つすべてのモデルエンティティが選択されます。あなたが同等のもので大丈夫なら

SELECT * FROM Model WHERE id = <numeric_id> AND parent IS NULL

あなたは次のようなものを使うことができます

SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>)

ただし、エンティティに親がある場合は、次のように、キーの一部としてそれを指定する必要があります。

SELECT * FROM Model where __key__ = KEY('ParentModel', <parent_name_or_id>, 'Model', <numeric_id>)

親自体に親がある場合は、それも指定する必要があります。 (祖父母は親の左側に移動します。など)。

もちろん、GQLに制限されていない場合(Python、Go、またはJavaを使用している場合など)、キーをクエリし、デコードしてIDでフィルタリングしてから、対応するエンティティをフェッチできます。ただし、もちろん、GQLしか使用できないため、データストアビューアでは機能しません。

5
aij

別の方法は、最初にIDを使用してエンティティのキ​​ーを取得することです。

key = db.Key.from_path('Model', int(id))

次に、によってオブジェクトを取得します

obj = db.get(key)

利点は、文字列のフォーマットを行う必要がないことです。

参照:このコースの問題セット3、 https://classroom.udacity.com/courses/cs253/

3

このエラーが発生していました:

GQLクエリエラー:1行42列で...が発生しました。次のいずれかが予期されていました:UNQUOTED_NAME ... QUOTED_NAME ... "

Google AppEngineデータストア開発者の管理コンソールで、引用符を削除して次のようなものを使用する必要があることがわかりました。

SELECT * FROM MyEntity WHERE __key__ = Key(MyEntity, 5695872079757312)
1
doctorram

私の場合、IDのタイプをStringからLongに変更する必要がありました

0
Elia Weiss