Problema no bulkloader do Google App Engine ao usar a configuração gerada automaticamente pelo yaml e entidades com ID numérico
Meu aplicativo usaDjango não rel. Eu não tenho acesso ao modelo.
eu tenho meubulkloader.yaml
arquivo gerado automaticamente porappcfg.py create_bulkloader_config
.
O problema é que os IDs numéricos das entidades estão sendo importados como nomes de chave de sequência. Portanto, se eu exportar uma entidade com ID int de, por exemplo,'62', ele é importado como entidade com o nome da chave da cadeia de caracteres'61' que estraga o Django.
Fragmento de bulkloader.yaml:
property_map:
- property: __key__
external_name: key
export_transform: transform.key_id_or_name_as_string
Estou tentando configurar o download / upload de dados usando o bulkloader e quero que os dados sejam tão fáceis de entender como o formato (como .csv) --- usandobulkloader.py --dump (...)
não é uma opção viável, pois fornece arquivos sqlite3 com conteúdo de entidades em uma única linha.
Tentei fazer o que o @Nick sugeriu e recebi uma exceção:
ErrorOnTransform: Numeric keys are not supported on input at this time.
Isso significa que eu tenho que me ater ao bulkloader.py (que usa esse formato sqlite werid) ou eu errei alguma coisa? ;)
Cabeçalho do transformador:
- 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)
Stacktrace inteiro:
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.')