为什么db.Model.get_by_id()在没有指定父项时返回None?

时间:2013-03-05 20:11:06

标签: google-app-engine google-cloud-datastore

我在GAE交互式控制台(/ _ah / admin / interactive)中运行以下代码,我不明白为什么get_by_id()在未指定父级时返回None。文档没有明确这个限制,我想不出强制执行它的理由。

import my_model
print my_model.all().fetch(1)[0].key().id()  # Returns 33006, used later
print my_model.get_by_id(33006)
print my_model.get_by_id(my_model.all().fetch(1)[0].key().id())

parent = my_model.all().fetch(1)[0].parent()
print my_model.get_by_id(33006, parent=parent)

输出:

33006
None
None
<my_model object at 0x109a6a690>

db.Model定义和显示使用祖先创建对象的代码:

class my_model(db.Model):
    user_id = db.StringProperty(indexed=True)
    email = db.StringProperty(indexed=True, default=None)

    def create(parent):
        obj = my_model(user_id='x', email='y', parent=parent)
        obj.put()

1 个答案:

答案 0 :(得分:3)

您的问题的答案是:因为相同的ID可能位于另一个实体中但具有不同的父级。

相同父级或没有父级的所有实体的ID都不同,但如果有祖先,那么您的数字ID不是唯一的。

相关问题