2010-06-27 32 views
5

我的應用程序使用Django non-rel。我無法訪問模型。使用yaml自動生成的配置和數字ID實體時的Google App Engine bulkloader問題

我有我的bulkloader.yaml文件自動生成appcfg.py create_bulkloader_config

問題是實體數字ID被導入爲字符串鍵名稱。因此,如果我導出int ID爲'62'的實體,它將被導入爲字符串鍵名爲'61'的實體,它將Django搞砸了。

Revelant bulkloader.yaml片段:

property_map: 
    - property: __key__ 
    external_name: key 
    export_transform: transform.key_id_or_name_as_string 

我試圖安裝下載/上傳數據OD使用bulkloader,我想有數據易於理解的格式(如.csv) - - 所以使用bulkloader.py --dump (...)不是一個可行的選擇,因爲它給了我sqlite3文件的實體內容作爲單行pickled。

編輯

我試圖做什麼@Nick建議和我有一個例外:

ErrorOnTransform: Numeric keys are not supported on input at this time. 

這是否意味着我必須堅持bulkloader.py(使用該werid sqlite的格式)或我搞砸了什麼? ;)

變壓器的標題:

- kind: auth_user 
    connector: csv 
    connector_options: 
     encoding: utf-8 
     skip_import_header_row: True 
     print_export_header_row: True 

    property_map: 
     - property: __key__ 
     external_name: key 
     export_transform: transform.key_id_or_name_as_string 
     import_transform: transform.create_foreign_key('auth_user', key_is_id=True) 

整個堆棧跟蹤:

 Traceback (most recent call last): 
     File "/opt/google/appengine/google/appengine/tools/adaptive_thread_pool.py", line 150, in WorkOnItems 
     status, instruction = item.PerformWork(self.__thread_pool) 
     File "/opt/google/appengine/google/appengine/tools/bulkloader.py", line 693, in PerformWork 
     transfer_time = self._TransferItem(thread_pool) 
     File "/opt/google/appengine/google/appengine/tools/bulkloader.py", line 848, in _TransferItem 
     self.content = self.request_manager.EncodeContent(self.rows) 
     File "/opt/google/appengine/google/appengine/tools/bulkloader.py", line 1269, in EncodeContent 
     entity = loader.create_entity(values, key_name=key, parent=parent) 
     File "/opt/google/appengine/google/appengine/ext/bulkload/bulkloader_config.py", line 385, in create_entity 
     return self.dict_to_entity(input_dict, self.bulkload_state) 
     File "/opt/google/appengine/google/appengine/ext/bulkload/bulkloader_config.py", line 131, in dict_to_entity 
     instance = self.__create_instance(input_dict, bulkload_state_copy) 
     File "/opt/google/appengine/google/appengine/ext/bulkload/bulkloader_config.py", line 209, in __create_instance 
     'Numeric keys are not supported on input at this time.') 

回答

6

你已經得到了export_transform 'key_id_or_name_as_string',但你沒有相應的進口轉變。試試這個:

property_map: 
- property: __key__ 
    external_name: key 
    export_transform: transform.key_id_or_name_as_string 
    import_transform: transform.create_foreign_key('Kind', key_is_id=True) 

其中'Kind'是配置文件中標識的類型的名稱。

+0

謝謝回答。我的問題是與主鍵,只是功能'create_foreign_key'誤導的名稱? – 2010-06-28 12:18:41

+0

該名稱具有誤導性 - 它應該可能只是簡單的'create_key'。 – 2010-06-28 17:33:16

+0

好吧:)我會嘗試儘快! – 2010-06-29 10:33:12

2

也能正常工作對我來說:

import_transform: transform.none_if_empty(long) 
相關問題