5

私のアプリケーションはDjango non-relを使用しています。モデルへのアクセス権がありません。

によってbulkloader.yamlファイルが自動生成されましたappcfg.py create_bulkloader_config

問題は、エンティティの数値 ID が文字列キー名としてインポートされていることです。したがって、たとえば'62' のint ID を持つエンティティをエクスポートすると、文字列キー名が'61' のエンティティとしてインポートされ、 Django が台無しになります。

Revelant の bulkloader.yaml フラグメント:

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

バルクローダーを使用してデータのダウンロード/アップロードをセットアップしようとしていますが、データを理解しやすい形式 (.csv など) にしたい ---bulkloader.py --dump (...)エンティティの内容を持つ sqlite3 ファイルが得られるため、使用は実行可能なオプションではありません一列に漬け込みました。

編集

@Nickが提案したことを試してみましたが、例外が発生しました:

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

これは、bulkloader.py (奇妙な 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.')
4

2 に答える 2

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」は、構成ファイルで識別される種類の名前です。

于 2010-06-28T12:08:03.610 に答える
2

これは私にとってはうまくいきます:

import_transform: transform.none_if_empty(long)
于 2011-04-03T22:40:24.577 に答える