Google应用引擎 - 仅查询字段

时间:2011-07-01 23:36:57

标签: python google-app-engine gqlquery

注意:此示例仅代表问题,而非实际用例

我想知道我是否有某些对象,例如Car和CarCategory:

Owner
     - name
     - age

Car 
     - name
     - brand
     - category( reference )
     - owner ( reference )

CarCategory
     - name
     - property

我可以查询某个字段吗?

例如CarCategory:

query = GqlQuery(“SELECT category FROM Car”)

我收到此错误:BadQueryError:Parse Error:预计在符号Car处没有其他符号

更新:如果想要拥有某个用户拥有的所有类别的列表该怎么办

我想以最有效的方式做到这一点。

2 个答案:

答案 0 :(得分:1)

您无法查询App Engine数据存储区中的各个字段。实体作为序列化协议缓冲区完整地存储和检索,因此无法仅检索某些字段。

鉴于db.Model抽象,也没有明智的方法来表示返回的数据 - 你不能简单地提供一个只填充了一些字段的模型,因为这可能会违反约束,并且如果你试图将它存回数据存储区,肯定会造成麻烦!

响应您的更新:传统上这需要加入和聚合,App Engine上都不支持这两种加入。您最好的选择是查询并检索所有用户的Car个实体,并自行按Category属性进行分类。

答案 1 :(得分:1)

好像你有更多选择,而不是自己排序。您可以为每个类别创建唯一的key_name,例如“Bronco”或使用唯一创建的密钥“8HJ876KKL”(可能由uuid创建)。然后在Car实体中,您可以拥有一个StringProperty,其中包含该类别的key_name。如果您希望汽车属于多个类别,可以将其设为StringListProperty。然后,您可以按key_name查询类别。

另一种选择是使用Car中的ReferenceProperty指向Category对象。然后,您可以在查找属于某个类别的每辆汽车时查询确切的密钥。

我不确定ReferenceProperty与StringProperty和StringListProperty之间的查询效率如何。

相关问题