2010-06-27 16 views
5

Ứng dụng của tôi sử dụng Django non-rel. Tôi không có quyền truy cập vào mô hình.Vấn đề bộ tải Bulk Engine của Google App khi sử dụng cấu hình tự động yaml và các thực thể có ID số

Tôi có tệp bulkloader.yaml được tự động phát hiện bởi appcfg.py create_bulkloader_config.

Sự cố là các thực thể ID số đang được nhập dưới dạng tên khóa chuỗi. Vì vậy, nếu tôi xuất thực thể có ID int, ví dụ: '62', nó sẽ được nhập dưới dạng thực thể có tên khóa chuỗi là '61' có đinh vít lên Django.

Revelant bulkloader.yaml Fragment:

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

Tôi đang cố gắng để thiết lập download/upload dữ liệu od sử dụng bulkloader, và tôi muốn có dữ liệu như dễ hiểu định dạng (như .csv) - - do đó, việc sử dụng bulkloader.py --dump (...) không phải là tùy chọn khả thi vì nó cung cấp cho tôi các tệp sqlite3 có nội dung thực thể được chọn làm một hàng.

EDIT

tôi đã cố gắng làm những gì @Nick đề nghị và tôi đã nhận một ngoại lệ:

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

Điều này có nghĩa rằng tôi phải dính vào bulkloader.py (có sử dụng rằng định dạng sqlite werid) hoặc Tôi đã làm điều gì đó? ;)

Tiêu đề của Transformer:

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

Tổng stacktrace:

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

Trả lời

6

Bạn đã có những export_transform 'key_id_or_name_as_string', nhưng bạn không có một khẩu tương ứng biến đổi. Hãy thử điều này:

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) 

Trường hợp 'Loại' là tên của loại được xác định trong tệp cấu hình.

+0

Cảm ơn cho câu trả lời. Vấn đề của tôi là với khóa chính, chỉ là tên của hàm 'create_foreign_key' gây hiểu nhầm? –

+0

Tên gây hiểu nhầm - có lẽ chỉ đơn giản là 'create_key'. –

+0

OK :) Tôi sẽ thử ASAP! –

2

này hoạt động tốt đối với tôi:

import_transform: transform.none_if_empty(long)