2 Stimmen

Das Elternteil befindet sich im Datenspeicher, die Kinder werden mit dem CSV-Bulkloader hochgeladen

Zurzeit habe ich eine Team die sich im Datenspeicher befinden:

team = Team.get_by_key_name('Plants')

Und ich habe die folgende CSV-Datei auf meinem lokalen Computer:

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

Meine bulkloader.yaml sieht so aus:

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

Ich schrieb eine models.py das so aussieht:

from google.appengine.ext import db

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

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

Ich habe auch eine my_transforms.py :

def transform_integer(integer_string):
  return int(integer_string)

Pregunta: Wie lade ich die CSV-Datei hoch, so dass die Character s den Datenspeicher betreten, werden ihre parent Eigenschaften zugewiesen sind team ?

3voto

Kit Punkte 28147

Die erste Antwort ist nicht sehr ausführlich, aber ich konnte ihr einige Informationen entnehmen.

Ich habe meiner CSV-Datei eine weitere Spalte mit dem Namen Character.csv :

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

En bulkloader.yaml sieht jetzt so aus:

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

Dann mache ich folgendes im Terminal:

$ cd /path/to/app
$ appcfg.py upload_data --config_file=bulkloader.yaml \
                        --filename=Character.csv \
                        --kind=Character \
                        --url=http://localhost:8082/_ah/remote_api

1voto

waffle paradox Punkte 2750

Die übergeordneten Informationen werden im Schlüssel gespeichert, so dass Sie die __key__ Eigentum.

Um einen mehrstufigen Schlüssel zu erstellen, müssen Sie Folgendes verwenden google.appengine.ext.bulkload.transform.create_deep_key die die path_info als Argument und gibt eine Transformationsmethode zurück, die das aktuelle Diktat in einen Schlüssel mit den von Ihnen in path_info . Für weitere Informationen lesen Sie bitte den Docstring in der aktuellen Methode, die Sie unter APPENGINE_ROOT/google/appengine/ext/bulkload/transform.py oder die neueste Version der Datei aus dem Repo ist aquí .

1voto

java4africa Punkte 11

Kleiner Hinweis - Sie können stattdessen die folgende Anweisung verwenden, wenn Ihre "my_transforms.transform_integer"

import_transform: 'lambda x: int(x)'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X