2

根據AppEngine documentation(下面引用),使用download_data和upload_data應該保留下載數據的原始密鑰。download_data和upload_data鍵區別AppEngine

當數據被下載時,這些實體與它們的 原始密鑰一起被存儲。數據上傳時,使用原始密鑰。 如果數據存儲中存在與上載的實體 具有相同密鑰的實體,則數據存儲中的實體將被替換。

我使用這兩個命令:

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不同?

更新

添加一些數據,督促和本地開發版本之間進行比較

製作關鍵:ag9zfmF3ZXNvbWVzdGdhbWVyGAsSCENhdGVnb3J5IgrYo9is2YbYqNmKDA

從PROD和upload_data爲localhost download_data之後,密鑰變成爲同一個對象:ahFkZXZ-YXdlc29tZXN0Z2FtZXIYCxIIQ2F0ZWdvcnkiCtij2KzZhtio2YoM

+1

這將有助於如果你表現出一些你觀察到的數據和模型類的。 –

回答

2

您需要在您的bulkloader config中使用適當的轉換,f或者例如,如果您使用的是ID,那麼類似於

- 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)