注意:此示例仅代表问题,而非实际用例
我想知道我是否有某些对象,例如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处没有其他符号
更新:如果想要拥有某个用户拥有的所有类别的列表该怎么办
我想以最有效的方式做到这一点。
答案 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之间的查询效率如何。