【问题标题】:Google App Engine - Datastore get_or_insert key_name confusionGoogle App Engine - 数据存储区 get_or_insert key_name 混淆
【发布时间】:2010-11-29 20:53:22
【问题描述】:

我对@9​​87654321@ 感到困惑。我应该传递什么作为key_name?考虑以下示例:

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

假设没有两个人可以有相同的名字。假设我想获取或插入一个名为 Peter 的新 Person,我的 get_or_insert 语句会是什么样子?

干杯,

皮特

【问题讨论】:

  • 您知道声明的 db.StringProperty 名称与 key_name 无关吗?

标签: python database google-app-engine key


【解决方案1】:

这里可能令人困惑的是,密钥没有直接显示在您的模型声明中,因此不需要您示例中的 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")

【讨论】:

  • 是的,但是这里设置的键名是实体的永久唯一标识符,而不是实体主体内的可变属性。模型声明中的“name”属性在上面的示例中未使用。
  • 我收到错误 TypeError: 'Key' object is not callable
【解决方案2】:

您可以将key_name 视为主键。查看get_or_insert(...) 的文档,有一个后端代码的示例。

如果 name 是一个唯一字段,您可能也希望将其用作键名。虽然我建议去掉空格并规范化大小写。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-16
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多