必要的博客示例设置; 作者
有文章
class Author(db.Model):
name = db.StringProperty()
class Post(db.Model):
author = db.ReferenceProperty()
article = db.TextProperty()
bob = Author(name='bob')
bob.put()
首先要记住的是,正常的对单个实体组(包括单个实体)进行的get/put/delete操作将按预期工作:
post1 = Post(article='first article', author=bob)
post1.put()
fetched_post = Post.get(post1.key())
只有在跨多个实体组进行查询时,您才能注意到不一致性。除非指定了parent
属性,否则所有实体都在单独的实体组中。因此,如果在bob
创建帖子后立即查看自己的帖子很重要,则应小心处理以下内容:
fetched_posts = Post.all().filter('author =', bob).fetch(x)
fetched_posts
可能 包含来自 bob
的最新的 post1
,但也可能不包含。这是因为所有的 Posts
不在同一个实体组中。当在HR中进行此类查询时,您应该考虑像这样思考:“为我获取Bob最新发布的帖子”。
由于我们的应用程序中重要的一点是作者在创建后能够直接在列表中看到自己的文章,所以我们将使用 parent
属性将它们绑在一起,并使用 ancestor
查询仅从该组内获取文章:
post2 = Post(parent=person, article='second article', author=bob)
post2.put()
bobs_posts = Post.all().ancestor(bob.key()).filter('author =', bob).fetch(x)
现在我们知道post2
将会在我们的bobs_posts
结果中。
如果我们的查询目的是获取“可能是所有最新的帖子+一定是Bob的最新帖子”,那么我们需要执行另一个查询。
other_posts = Post.all().fetch(x)
然后将结果other_posts
和bobs_posts
合并在一起,以获得所需的结果。
MyNDBModal.get_by_id(theID)
,即使它是最近写入的,我也会总是找到它吗? - Mazyod