App Engine にモデルがあり、CSV 形式でエクスポートしてから、appcfg.py と bulkloader.yaml を使用してローカルの開発環境にインポートしています。
ほとんどのモデルをインポートおよびエクスポートできますが、常に存在するとは限らない外部キーを持つモデルに問題があります。以下のラムダインポートを使用して、常に外部キーをインポートするNone
か、変換を使用しcreate_foreign_key()
て、csv ファイルのすべての行に外部キーがある場合に外部キーをインポートできます。
存在する場合は外部キーをインポートし、存在しない場合は無視するように bulkloader.py を構成するにはどうすればよいですか?
- kind: MyModel
connector: csv
connector_options:
property_map:
- property: myOtherModel
external_name: myOtherModel
import_transform: "lambda x: x is None and None or None"
#import_transform: transform.create_foreign_key('MyOtherModel', key_is_id=True)
export_transform: transform.key_id_or_name_as_string
import_transform
ラムダ変換の代わりに2 番目のコメントを外すだけで、このエラーが発生します。
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/bulkload/transform.py", line 127, in generate_foreign_key_lambda
value = int(value)
ValueError: invalid literal for int() with base 10: ''
このエラーは、appcfg.py を実行すると発生します。外部キーのない、または外部キーが常に存在する他のすべてのインポートは、適切に機能しています。
appcfg.py upload_data --config_file=bulkloader.yaml --num_threads=1 --batch_size=50 --url=http://localhost:8080/remote_api --email=Chris --passin --kind=MyModel --filename=MyModel.csv
csv ファイルのmyOtherModel
列には、含まれている場合と含まれてMyOtherModel.key().id()
いない場合があります。
例えば。
myOtherModel
1234
4567
2345
5678