数値IDを使用してオブジェクトを取得するGQLクエリを作成したいと思います。アプリ管理コンソールのデータストアビューアでこれを行っているため、Model.get_by_id(numeric_id)を使用できません。何かのようなもの
SELECT * FROM Model WHERE id = <numeric_id>
また、動作しません。
これを試して:
SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>)
残念ながら、同等のクエリを作成する方法はないようです。
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しか使用できないため、データストアビューアでは機能しません。
別の方法は、最初にIDを使用してエンティティのキーを取得することです。
key = db.Key.from_path('Model', int(id))
次に、によってオブジェクトを取得します
obj = db.get(key)
利点は、文字列のフォーマットを行う必要がないことです。
参照:このコースの問題セット3、 https://classroom.udacity.com/courses/cs253/
このエラーが発生していました:
GQLクエリエラー:1行42列で...が発生しました。次のいずれかが予期されていました:UNQUOTED_NAME ... QUOTED_NAME ... "
Google AppEngineデータストア開発者の管理コンソールで、引用符を削除して次のようなものを使用する必要があることがわかりました。
SELECT * FROM MyEntity WHERE __key__ = Key(MyEntity, 5695872079757312)
私の場合、IDのタイプをStringからLongに変更する必要がありました