繁体   English   中英

从数据存储中检索层次结构数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM