2

目前我有一个Team驻留在数据存储区:

team = Team.get_by_key_name('Plants')

我的本地计算机中有以下 CSV 文件:

name,level
Pea Shooter,1
Threepeater,3
Melon-pult,20

我的bulkloader.yaml样子是这样的:

python_preamble:
- import: models
- import: my_transforms

transformers:
- kind: Character
  connector: csv
  property_map:
  - property: name
    external_name: name

  - property: level
    external_name: level
    import_transform: my_transforms.transform_integer

我写了一个models.py看起来像这样的:

from google.appengine.ext import db

class Team(db.Model):
  name = db.StringProperty()

class Character(db.Model):
  name = db.StringProperty()
  level = db.IntegerProperty()

我还写了一个my_transforms.py

def transform_integer(integer_string):
  return int(integer_string)

问题: 如何上传 CSV 文件,以便当Characters 进入数据存储区时,将其parent属性分配给team

4

3 回答 3

3

第一个答案缺乏细节,但我能够从中收集到一些信息。

我在我的 CSV 文件中添加了另一列,名为Character.csv

team,name,level
Plants,Pea Shooter,1
Plants,Threepeater,3
Plants,Melon-pult,20

现在bulkloader.yaml看起来像这样:

python_preamble:
- import: models
- import: my_transforms

transformers:
- kind: Character
  connector: csv
  property_map:
  - property: __key__
    external_name: team
    import_transform: transform.create_deep_key(('Team', 'team', False),
                                                ('Character', 'name', False))

  - property: name
    external_name: name

  - property: level
    external_name: level
    import_transform: my_transforms.transform_integer

然后我在终端中执行以下操作:

$ cd /path/to/app
$ appcfg.py upload_data --config_file=bulkloader.yaml \
                        --filename=Character.csv \
                        --kind=Character \
                        --url=http://localhost:8082/_ah/remote_api
于 2011-07-28T15:04:17.450 回答
1

父信息存储在键中,因此您需要设置__key__属性。

为了创建多级键,您需要使用google.appengine.ext.bulkload.transform.create_deep_key,它path_info作为参数并返回一个转换方法,该方法将当前 dict 解析为带有您在 中指定的父级的键path_info。有关更多信息,请阅读实际方法中的文档字符串,可以在 中找到APPENGINE_ROOT/google/appengine/ext/bulkload/transform.py,或者 repo 中文件的最新版本在此处

于 2011-07-27T22:54:12.087 回答
1

小点 - 如果您的“my_transforms.transform_integer”,您可以使用下面的语句

import_transform: 'lambda x: int(x)'
于 2011-08-23T17:46:13.713 回答