如何在 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)