[英]Retrieving hierarchial data from datastore
我正在使用Google App Engine(和Python)构建应用程序。 关于从数据存储区检索数据,我有两个问题。
我有有关用户的信息以及有关用户发布的信息的信息。 这是数据库模型的一部分:
class User(db.Model):
country = db.StringProperty()
# many other entities
class Post(db.Model):
author = db.ReferenceProperty(User)
# many other entities
我要检索由某些国家/地区的用户发布的帖子。 我这样尝试过:
posts_query = Post.all().filter(' author.country == ', country)
posts = posts_query.fetch(limit = 100)
但是此查询不会返回任何结果(国家/地区变量具有数据存储区中存在的值)。 我需要在查询中更正什么,所以有效吗?
第二个问题:如果发帖数未知(可能大于100),如何(在给定的情况下)从数据存储中检索所有发帖?
提前致谢,
-skazhy
如果要执行此操作,则需要取消规范化:将用户所在国家/地区的副本存储在其所有帖子中,然后对此进行查询。 数据存储区不支持联接,而联接是满足此查询所必需的,并且在任何情况下,非规范化的效率要高得多。
就检索“所有”结果而言,您可以指定一个任意大的限制,但请考虑:您真的要这样做吗? 您一次就能向用户明智地显示多少个结果是有限制的; 如果您获得的结果超过该结果,则几乎可以肯定要分页。
二次非正规化。 如果国家/地区是您需要经常查询的特定事物,则可以为其添加一个新模型。 然后,该国家/地区将成为用户和帖子的ReferenceProperty:
class User(db.Model):
country = db.ReferenceProperty(Country,collection_name=users)
# many other entities
class Post(db.Model):
author = db.ReferenceProperty(User)
country = db.ReferenceProperty(Country,collection_name=posts)
# many other entities
class Country(db.Model):
name = db.StringProperty()
# posts from everyone in the user's country:
# user.country.posts.all()
为了回答第二个问题,您可以将posts_query用作迭代器来检索所有结果。 请参阅App Engine文档: http : //code.google.com/appengine/docs/python/datastore/queryclass.html#Query_fetch
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.