【问题标题】:Specifying a key for datastore entities为数据存储实体指定密钥
【发布时间】:2014-11-17 08:08:02
【问题描述】:

我仍在努力了解数据存储的工作原理。我以前没有数据库方面的经验,所以这不是一个冲突的范例情况;我想我只是对 NDB 的祖先结构感到困惑。

假设我有这个模型类:

class Spam(Model.ndb)
    eggs = ndb.StringProperty();

所以我创建了一个实例并像这样存储它:

foo = Spam(eggs="some string")
foo.put()

我知道put() 返回一个密钥,如果我尝试从同一个脚本访问它,我可以轻松调用get(),但是有没有办法指定我自己的密钥,所以我可以轻松访问foo 来自我应用中另一个脚本的实体?

我意识到我可以像这样为foo 指定父级:

foo = Spam(parent=ndb.Key("Bar","Baz"),eggs="some string")

但是从那里,我将如何使用"Bar" 和/或"Baz" 在不同的脚本中访问foo

【问题讨论】:

  • 首先,请为您的问题选择一个更相关的标题:这是关于指定密钥的,与“其他脚本”无关。其次,你读过documentation on keys吗?这似乎很清楚您将如何指定自己的密钥。
  • 我将标题更改为更具描述性。它确实与“其他脚本”有关,因为我的目标是在一个脚本中 put() 一个实体,在另一个脚本中 get() 它。我确实看过关键文档,但是它对接口的描述不是很清楚,所以我来到了这里。

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


【解决方案1】:

如果您有层次结构,则使用父级。因此,如果您有食谱书,您会将这本书作为父母,将每个食谱作为孩子。我不认为那是你想要的。

如果要设置密钥,请执行以下操作:

SuperEggs= Spam(id='SuperEggs', eggs="2 egg whites")
SuperEggs.put()

您始终可以让 App 引擎设置自己的密钥,这将防止争用和意外覆盖,当您想再次访问实体时,只需在某个字段上执行操作即可。添加一个名称并搜索它。

仅供参考,从 put 中返回的 id 可让您从应用程序(或任何授权应用程序)的任何部分进行访问。数据存储是全局的,不特定于脚本。

【讨论】:

  • 谢谢,这正是我想要的。我知道数据存储是全球性的;我只是不清楚如何在一个脚本中 put() 一个实体并在另一个脚本中 get() 它而不在它们之间传递变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 2017-11-08
相关资源
最近更新 更多