У меня есть модель в 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
вместо лямбда-преобразования приведет к этой ошибке.
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
Столбец myOtherModel
в файле csv иногда содержит MyOtherModel.key().id()
, а иногда нет.
Например.
myOtherModel
1234
4567
2345
5678