La mia applicazione utilizza Django non-rel. Non ho accesso al modello.Problema con il programma di caricamento di massa di Google App Engine quando si utilizza la configurazione con generatore automatico yaml e le entità con ID numerico
Ho il mio file bulkloader.yaml
generato automaticamente da appcfg.py create_bulkloader_config
.
Il problema è l'ID numerico delle entità che vengono importate come nomi di chiavi stringa. Quindi, se esporto l'entità con ID int, ad esempio "62", viene importato come entità con il nome della chiave stringa "61" che rovina Django.
Revelant bulkloader.yaml Frammento:
property_map:
- property: __key__
external_name: key
export_transform: transform.key_id_or_name_as_string
sto cercando di configurazione di upload od il download dei dati/utilizzando bulkloader, e voglio avere i dati come facile da capire il formato (come .csv) - - Quindi usare bulkloader.py --dump (...)
non è un'opzione praticabile dato che mi dà file sqlite3 con contenuti di entità decapitati come una singola riga.
EDIT
Ho provato a fare quello che @ Nick ha suggerito ed ho ottenuto un'eccezione:
ErrorOnTransform: Numeric keys are not supported on input at this time.
Questo significa che devo attenersi a bulkloader.py (che utilizza tale formato SQLite werid) o Ho fatto qualcosa? ;)
intestazione di 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)
intero 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.')
Grazie per la risposta. Il mio problema è con la chiave primaria, è solo il nome della funzione 'create_foreign_key' fuorviante? –
Il nome è fuorviante - probabilmente dovrebbe essere semplicemente 'create_key'. –
OK :) Ci proverò APPENA POSSIBILE! –