帮助数据存储区查询

时间:2011-05-15 18:10:16

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

您好我正在尝试列出包含给定艺术家的歌曲的播放列表,其中我有键名,我的模型是:

**playlist**
songs = db.ListProperty(db.Key)

**Song**
artist = db.ReferenceProperty(Artist,collection_name='songs')

**Artist**
Key Name = john-lennon

因此播放列表包含一个歌曲键列表,一首歌曲包含对该艺术家的引用。

任何帮助都会受到赞赏,到目前为止,我的查询一直很简单,所以现在有点迷失了: - )

1 个答案:

答案 0 :(得分:3)

使用GAE你无法真正做到这样的查询。数据存储区不是关系数据库,也不像JOIN那样。

你能做的最好的事情就是获得艺术家是约翰·列侬的所有歌曲,然后找到这些歌曲的播放列表:

songs = GqlQuery('SELECT __key__ FROM song WHERE artist = :1', 'john-lennon')
playlists = GqlQuery('SELECT * FROM playlist WHERE songs IN :1', songs)

请注意,如果约翰列侬有30首以上的歌曲,即使这样也会有问题 - 正如文档所说:

  

注意:IN和!=运算符在后台使用多个查询。例如,IN运算符为列表中的每个项执行单独的基础数据存储区查询。返回的实体是所有基础数​​据存储区查询的交叉产品的结果,并且是重复数据删除的。任何单个GQL查询最多允许30个数据存储区查询。