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)

質問:Character CSVファイルをアップロードして、がデータストアに入るときに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を解析して現在のdictをで指定した親を持つキーに変換する変換メソッドを返しますpath_info。詳細については、実際のメソッドのdocstringを読んでください。これは、にあります。APPENGINE_ROOT/google/appengine/ext/bulkload/transform.pyまたは、リポジトリにあるファイルの最新バージョンはここにあります。

于 2011-07-27T22:54:12.087 に答える
1

小さなポイント-「my_transforms.transform_integer」の場合は、代わりに以下のステートメントを使用できます

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