Google App Engine - Datastore get_or_insert 键名困惑
我对 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")