2014-09-13 42 views
0

我正在使用python腳本將一些數據上傳到我的應用程序引擎後端。使用散貨機更新數據

下面是它在bulkloader.yaml定義

- kind: Subcategory 
    connector: csv 
    connector_options: 
    encoding: utf-8 
    property_map: 
    - property: __key__ 
     external_name: id 
     export_transform: transform.key_id_or_name_as_string 
     import_transform: transform.none_if_empty(int) 

    - property: name 
     external_name: name 

    - property: categoryId 
     external_name: categoryId  
     export_transform: transform.key_id_or_name_as_string 
     import_transform: transform.none_if_empty(int) 

    - property: language 
     external_name: language 

    - property: active 
     external_name: active 
     import_transform: bool 

的問題是,該列積極動態之後發生變化,下一次我再次上傳相同的數據它被替換爲假,因爲列沒有按」 t存在於csv中。

我試圖從bulkloader中刪除列,但隨後列消失。這可能是因爲實體被替換,而不是更新。有沒有辦法在上傳時保留已有的列而不需要替換/刪除它們?

回答

1

對不起,沒有簡單的方法將屬性與批量加載程序合併。正如您注意到的那樣,它會根據您的CSV數據創建實體,然後使用已知鍵存儲它們,覆蓋現有實體。要完成合並,您需要批量下載現有實體,在數據集中執行合併,然後加載合併的實體。

在加載程序邏輯過程中有一些鉤子可以幫助實現合併工具。看到這個相關的SO問題:Merge multiple columns in bulkloader但是你仍然需要以某種方式從數據存儲中獲取要合併的屬性。數據存儲不能自行執行合併。

+0

我不確定這是否會對您有所幫助,因爲它是從2010年開始的,但以下是來自App Engine第1版書籍的舊散裝加載程序章節:http://ae-book.appspot.com/chapters/bulkdata這早於使用'bulkloader.yaml'的批量加載程序的版本,但也許它會很有用。我相信批量加載器現在通常被認爲是Python SDK的一個未公開的功能。 (備份/恢復仍然是受支持的功能,但不再依賴於批量加載器實用程序。) – 2014-09-14 02:12:33