0

数据存储查看器

更新:见下文

我已经弄清楚如何为我的数据集填写 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|

更新:好的,我发现了如何以“键名”列为代价填充“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|
...

Datastore Viewer 中的输出现在如下所示:

数据存储查看器现在的样子

仍然想知道是否有任何方法可以填充 ID 和“密钥名称”列并将写入操作减少到 4?

4

1 回答 1

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,这很好:

将操作数写到 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|

我不明白的是......我如何动态添加新单词,以便我可以让单词成为关键,就像批量上传器正在为我做的那样。但我不会太担心这个,只要散装装载机能做到,我想这已经足够了。

于 2013-02-21T04:35:13.170 回答