Google App Engine - Datastore get_or_insert 键名困惑

5 投票
2 回答
3898 浏览
提问于 2025-04-16 07:47

我对 get_or_insert(..) 有点困惑。作为 key_name,我应该传入什么呢?考虑以下例子:

class Person(db.model)
    name = db.StringProperty(required=True)

假设没有两个人人可以有相同的名字。比如我想要获取或插入一个名叫 Peter 的新 Person,那么我的 get_or_insert 语句应该是什么样的呢?

谢谢,

Pete

2 个回答

1

你可以把 key_name 想象成一个主键。可以查看一下文档,里面有关于 get_or_insert(...) 的例子,展示了后端代码的样子。

如果名字是一个唯一的字段,你也可以考虑把它用作键名。不过,我建议你在使用之前去掉空格,并且统一大小写。

5

这里可能让人困惑的是,键(key)并没有直接出现在你的模型声明中,所以你示例中的 name = db.StringProperty 这一部分其实是不需要的。get_or_insert 方法的第一个参数是键名,这是必填的,所以你需要找的代码应该像这样:

person = Person.get_or_insert('Peter')
# other interesting & useful code here...
# later, maybe we need to retrieve that key name from the object:
name = person.key().name()
assert(name == "Peter")

撰写回答