簡體   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