2

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
4

2 に答える 2

2

foreign key値が存在しない場合のデフォルトの動作は、 reference propertyvalue: を取りNone、これをコード化します:

import_transform: transform.create_foreign_key('MyOtherModel')

エラーメッセージのように:代わりにvalue does not exist使用することを示しています 'othercolumn','','anohtercolumn''othercolumn',,'anohtercolumn'

したがって、ソース '' がこれを処理する場合:

このリンクから: http://eikke.com/python-ifelse-in-lambda/ Thomas Thurman のコメントとして、ラムダ式は次のようになります。

import-transform: "lambda x: [x, None][x=='']"

私はそれがあなたのために働くことを願っています

于 2012-01-23T09:14:11.933 に答える