我在 App Engine 中有一个模型,我以 CSV 格式导出,然后使用 appcfg.py 和 bulkloader.yaml 导入我的本地开发环境。
我可以导入和导出大多数模型,但是我遇到了具有并不总是存在的外键的模型的问题。当我的 csv 文件中的每一行都有外键时,我可以使用下面的 lambda 导入始终将外键导入None
或使用create_foreign_key()
转换导入外键。
如何配置 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
代替 lambda 转换就会产生此错误。
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