您好我正在尝试列出包含给定艺术家的歌曲的播放列表,其中我有键名,我的模型是:
**playlist**
songs = db.ListProperty(db.Key)
**Song**
artist = db.ReferenceProperty(Artist,collection_name='songs')
**Artist**
Key Name = john-lennon
因此播放列表包含一个歌曲键列表,一首歌曲包含对该艺术家的引用。
任何帮助都会受到赞赏,到目前为止,我的查询一直很简单,所以现在有点迷失了: - )
答案 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个数据存储区查询。