在KEY列表中使用__key__进行GQL查询

时间:2011-11-29 01:47:45

标签: google-app-engine gql

GQL reference中,鼓励将IN关键字与值列表一起使用,并从GQL查询中手动构建Key

SELECT * FROM MyModel WHERE __key__ = KEY('MyModel', 'my_model_key')

会成功。但是,使用您希望工作的代码:

SELECT * FROM MyModel WHERE __key__ IN (KEY('MyModel', 'my_model_key1'),
                                        KEY('MyModel', 'my_model_key2'))

在数据存储查看器中,存在“无效的GQL查询字符串”的投诉。

格式化此类查询的正确方法是什么?

更新:这不适用于当前的SDK。正如我在评论中所述,使用列表时,只有引用(例如:1:email)或int,float,string,boolean或null literal是可接受的列表条目。

第二次更新:我修复了错误,现在可以执行此类查询。可以在Google代码托管diff中找到修复程序。

PS我知道有更有效的方法可以在Python中完成此操作(无需构建GQL查询)并使用remote_api,但每次调用remote_api都会计入配额。在配额不是(必然)免费的环境中,快速和脏的查询非常有用。

2 个答案:

答案 0 :(得分:2)

我不明白。您的目标是在数据存储查看器中查看特定的实体列表以避免使用配额?我不知道如何使用GQL执行此操作,但如果您知道其密钥,则可以直接访问实体,例如:

https://appengine.google.com/datastore/edit?app_id=myapp&key=key1

https://appengine.google.com/datastore/edit?app_id=myapp&key=key2

如果您在代码中执行此操作,请不要尝试使用GQL。使用db.get(keys)或类似的东西。

答案 1 :(得分:1)

实施fix后,原帖中的代码段就足够了:

SELECT * FROM MyModel WHERE __key__ IN (KEY('MyModel', 'my_model_key1'),
                                        KEY('MyModel', 'my_model_key2'))

PS我意识到我对原帖的评论可能不够明确,作为对未来观众的回答。