如何在 Datastore GAE Python 中定义键名?

Posted

技术标签:

【中文标题】如何在 Datastore GAE Python 中定义键名?【英文标题】:How to define Key Name in Datastore GAE Python? 【发布时间】:2013-03-29 13:10:12 【问题描述】:

OS Win7,GAE 1.7.6,Python 2.7.3,还在学习GAE..

正在处理项目,需要有输入表单来扩展其内容(姓名,电子邮件,电话..),并在数据存储中使用定义的键名,最好以定义方式增加。在我总是让数据存储区自动生成 id 之前,我从未使用过 Key Name。

使用 appcfg.py 工具从 CSV 文件导入数据来填充数据存储区。

当我添加新内容时。 链接:http://s17.postimg.org/6pfqjv6gv/Unffaftitled.png

在 Datastore 中定义键名的一些基本示例是什么?

【问题讨论】:

【参考方案1】:

这就是你要找的吗?

class Employee(db.Model):
  first_name = db.StringProperty()
  last_name = db.StringProperty()

employee = Employee(key_name='asalieri',
                    first_name='Antonio',
                    last_name='Salieri')

employee.put()

这将创建一个键名为 asalieri 的实体。然后,您可以使用 Employee.get_by_key_name ('asalieri') 检索此实体。

这是此处文档中的示例代码:https://developers.google.com/appengine/docs/python/datastore/entities#Creating_an_Entity

希望有帮助!

【讨论】:

【参考方案2】:

快速建议

正在进行项目,需要有输入表单来扩展其 内容(姓名、电子邮件、电话..),在数据存储区中定义了键名, 最好以定义方式增加

我花了一两分钟试图理解你在说什么。

不要不加思索就匆忙输入你想问的问题。 如果您想从其他人那里得到深思熟虑的答案,请尝试清楚地提出问题。

我的问题

您认为为什么需要手动定义键名? 你认为你得到了什么好处?

据我推断,您似乎不了解 GAE HRD 数据存储的基础知识。 如果您不了解 HRD 数据存储,则无法在 GAE 上有效编码。

我的答案

您的问题没有简短的答案。 我只能建议您花几个小时观看和阅读以下内容。 然后,您可以做出更好的设计决策。

    观看Building Scalable Web Apps with App Engine - Google IO 2008,尤其是从第 28 分钟开始。我会建议观看整件事。 关注App Engine Datastore Under the Covers - Google IO 2008。 阅读Best Practices for writing scalable applications。 来自Mastering the datastore,我发现Modeling Entity Relationships 部分也非常有用。 这是另一个非常有用的 *** 问答 -- How to think in datastore instead of Database

【讨论】:

会调查一下,那就是答案,了解更多有关 GAE HRD 数据存储的信息,如果您有更多关于此主题的相关资料,请在此处留下。我知道 Google 是我的朋友,但经验是最好的。谢谢你的回答。 我添加了一些我个人认为非常有用的链接和资源。【参考方案3】:

根据official docs,您可以将__key__ 伪属性映射到bulkloader .yaml 配置文件中相应的CSV 列,例如:

transformers:
- kind: MyKind
  ...
  property_map:
  - property: __key__
    external_name: MyKeyColumn
    ...

(如果您希望数据存储区像以前一样自动为您生成密钥 ID,那么您必须从 .yaml 文件中删除此 property。)

【讨论】:

bulkloader.yaml 显示这个 shema...如何实现我的下一个输入将映射到 __ 键 __ 伪属性(键名),而不是自动生成的键 id,也到请注意我正在使用 wtf.Form 在 ndb 上实现输入。 我不确定您使用的表单框架,但如果您提供一个整数,那么它将成为密钥的 ID 部分,如果您提供一个字母数字字符串,那么它将成为“密钥名称”钥匙的一部分。您可以使用整数或字符串。【参考方案4】:

ndb 示例(查找 'id' insted 'key_name'):

employee = Employee(id='asalieri',
                    first_name='Antonio',
                    last_name='Salieri')

【讨论】:

以上是关于如何在 Datastore GAE Python 中定义键名?的主要内容,如果未能解决你的问题,请参考以下文章

如何确保 GAE 上的 MemCache 和 Datastore 之间的一致性?

说明在 Google Datastore (GAE) 上读/写的性能注意事项?

从本地 GAE 项目连接到 Google Cloud Datastore

db.get() 与 db.get_by_key_name() 性能(GAE BIgtable/Datastore)

GAE上的RESTful API:端点 - 原型数据存储区与云端点

在 Google App Engine Datastore (python 2.7) 中存储 lambda 函数