如何在Google App Engine中查询属性的属性?

时间:2015-03-22 03:17:53

标签: python google-app-engine google-cloud-datastore app-engine-ndb

我有两个NDB模型类,Book和Author。作者有一个StringProperty“name”和一个auto_add_now“date”,Book有一个PickleProperty“authors”,它是Author类型的对象列表。

我想进行查询并收到所有在作者列表中都有currentAuthor的书籍列表(匹配“名称”并忽略“日期”)。我不认为我可以直接使用.IN,因为日期可能不同。我正在玩设置date = None用于测试目的(因为它对于所有Author对象似乎都是None?这是因为我在本地运行吗?)然后写

books = Book.query(Book.authors.IN([currentAuthor])).fetch()

但返回一个空列表。

1 个答案:

答案 0 :(得分:2)

它不能使用PickleProperty

来自文档

  

PickleProperty - Value是一个Python对象(例如列表或字典或字符串)   可以使用Python的pickle协议进行序列化;数据存储区   泡菜序列化为blob。默认情况下未编入索引。

即使您确实已将其编入索引,您也无法实现IN查询,因为它不知道已将pickle中的实体编入索引作为单独的索引值。

您应该为作者使用重复的StructuredProperty,KeyProperty或StringProperty。然后,您可以按预期执行查询。