已更新:见下文
我已经想出如何为我的数据集填充Key Name字段,这样我现在已经将写操作减少了2(从8减少)。但我还有这个额外的空列“ID”。我已经尝试了bulkloader.py的各种配置,但我无法填充该列,并希望进一步减少我的写操作...
这就是我所拥有的:
python_preamble:
- import: base64
- import: re
- import: google.appengine.ext.bulkload.transform
- import: google.appengine.ext.bulkload.bulkloader_wizard
- import: google.appengine.ext.db
- import: google.appengine.api.datastore
- import: google.appengine.api.users
transformers:
- kind: Word
connector: csv
property_map:
- property: __key__
external_name: word
export_transform: transform.key_id_or_name_as_string
- property: ID
external_name: ID
# How to configure this one to use up that silly empty column called "ID"?
- property: otherlangs
external_name: otherlangs
这是我的csv文件的标题和一些示例行:
$ head allting.csv
ID,word,otherlangs
100,a,it|uno|
200,aaltos,fi|aaltojen|
300,aardvark,is|jarðsvín|nl|aardvarken|
更新: 好吧,我发现了如何以“Key Name”列为代价来填充“ID”列...
我将bulkload.py更改为:
transformers:
- kind: Word
connector: csv
connector_options:
encoding: utf-8
columns: from_header
property_map:
- property: __key__
external_name: id
export_transform: transform.key_id_or_name_as_string
import_transform: transform.create_foreign_key('id', key_is_id=True)
- property: word·
external_name: word·
- property: otherlangs·
external_name: otherlangs·
csv文件如下所示:
id,word,otherlangs
100,a,it|uno|
200,aaltos,fi|aaltojen|
...
数据存储查看器中的输出现在看起来像这样:
仍然想知道是否有任何方法可以填充ID和“密钥名称”列 并将写操作降为4?
答案 0 :(得分:0)
由于没有人对这个问题有任何想法,我将记录我提出的这个解决方法。
通过对bulkload.yaml文件执行此操作,我能够将写操作降低到4
...
transformers:
- kind: Word
connector: csv
connector_options:
encoding: utf-8
columns: from_header
property_map:
- property: __key__
external_name: word
export_transform: transform.key_id_or_name_as_string
- property: otherlangs
external_name: otherlangs
将我的课改成这样:
class Word(db.Model):
word = db.StringProperty(multiline=False)
otherlangs = db.StringProperty(multiline=True)
def __str__(self): #encode('utf8')
return "word: " + str(self.key().name().encode('utf8')) + ", otherlangs: " + self.otherlangs.encode('utf8')
现在写操作是4,这很好:
在交互式控制台中查询变得更加棘手,我花了一些时间才弄明白。
from google.appengine.api import users
from google.appengine.ext.db.metadata import Namespace
import words
foo = words.Word.get_by_key_name('abalone')
print foo
产生:
word: abalone, otherlangs: fr|ormeaux|it|orecchie di mare|
我不明白的是......我怎样才能动态添加新单词,以便我可以将单词作为关键,就像批量上传者为我做的那样。但是我不会太担心这个问题,只要批量加载程序可以做到这一点,我觉得这一点已经足够好了。