Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GQL query with numeric id in datastore viewer

I want to build GQL query to get an object using its numeric id. I'm doing this in Datastore viewer in App management console, so I can't use Model.get_by_id(numeric_id). Something like

SELECT * FROM Model WHERE id = <numeric_id> 

also doesn't work.

like image 373
Pawel Markowski Avatar asked Oct 06 '10 06:10

Pawel Markowski


2 Answers

Try this:

SELECT * FROM Model where __key__ = KEY('Model', <numeric_id>) 
like image 135
Saxon Druce Avatar answered Nov 09 '22 09:11

Saxon Druce


Unfortunately, there does not appear to be a way to write a query equivalent to

SELECT * FROM Model WHERE id = <numeric_id> 

which would select all Model entities with the given id. If you're ok with something equivalent to

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

you can use something like

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

If your entity does have a parent though, you'll need to specify that as part of the key, like

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

If the parent itself has a parent, you'll need to specify that too. (Grandparent goes left of the parent, and so on.)

Of course if you're not restricted to GQL (like if you're using Python, Go, or Java), you can query the keys, decode them and filter by id, then fetch the corresponding entities. But of course that doesn't work in the Datastore Viewer since you can only use GQL.

like image 27
aij Avatar answered Nov 09 '22 09:11

aij