根据AppEngine documentation(引用如下),使用download_data和upload_data应该保留下载数据的原始密钥。
下载数据时,实体与其一起存储 原始钥匙。上载数据时,将使用原始密钥。 如果数据存储中存在与实体具有相同密钥的实体 正在上传,数据存储区中的实体将被替换。
我正在使用这两个命令:
appcfg.py download_data --oauth2 --url=https://myapp-id.appspot.com/_ah/remote_api --filename=testdata/gamedata
appcfg.py upload_data --url=http://localhost:9876/_ah/remote_api --filename=testdata/gamedata
数据上传时使用相同的ID,但键不同,任何想法我做错了什么?或者是在本地devappserver中以不同方式计算密钥?
更新
添加一些数据以在prod和本地开发版本之间进行比较
生产密钥:ag9zfmF3ZXNvbWVzdGdhbWVyGAsSCENhdGVnb3J5IgrYo9is2YbYqNmKDA
从PROD下载data_data并将upload_data发送到localhost后,该键变为同一个对象:ahFkZXZ-YXdlc29tZXN0Z2FtZXIYCxIIQ2F0ZWdvcnkiCtij2KzZhtio2YoM
答案 0 :(得分:2)
您需要在bulkloader配置中使用相应的转换,例如,如果您使用的是ids,那么
- kind: YourEntity
connector: csv
property_map:
- property: __key__
external_name: key
export_transform: transform.key_id_or_name_as_string
import_transform: transform.none_if_empty(transform.create_foreign_key('YourEntity', key_is_id=True))
- property: more props...
会在前进的路上转换钥匙。
如果你有父母的实体,那么你需要在出路上分开并重新组合:
- kind: ChildEntity
connector: csv
property_map:
- property: __key__
external_name: childKey
import_transform: transform.create_deep_key(('ParentEntity', 'parentKey', True),('ChildEntity', transform.CURRENT_PROPERTY, True))
export:
- external_name: parentKey
export_transform: transform.key_id_or_name_as_string_n(0)
- external_name: childKey
export_transform: transform.key_id_or_name_as_string_n(1)