GQL query with numeric id in datastore viewer

岁酱吖の 提交于 2019-12-03 01:04:37

问题


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.


回答1:


Try this:

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



回答2:


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.




回答3:


Another way around is, first get the key for the entity using the id by

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

then get the object by

obj = db.get(key)

The advantage is, you do not have to do any string formatting.

reference: problem set 3 at this course, https://classroom.udacity.com/courses/cs253/




回答4:


I was getting this error:

GQL Query error: Encountered ... at line 1, column 42. Was expecting one of: UNQUOTED_NAME ... QUOTED_NAME ..."

It turns out that in the Google AppEngine datastore developer's admin console, you should drop the quotes and use something like this:

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



回答5:


In my case I had to change the type of ID from String to Long



来源:https://stackoverflow.com/questions/3869858/gql-query-with-numeric-id-in-datastore-viewer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!