Mon application utilise Django non-rel. Je n'ai pas accès au modèle. J'ai mon fichier généré automatiquement par appcfg.py create_bulkloader_config
.Problème lié au bulkloader Google App Engine lors de l'utilisation de la configuration autogénérée yaml et des entités avec un ID numérique
Problème: les entités numériques sont importées en tant que noms de clé de chaîne. Donc, si j'exporte l'entité avec l'ID int, par exemple, '62', il est importé en tant qu'entité avec le nom de clé de chaîne '61' qui vrille Django.
Revelant bulkloader.yaml Fragment:
property_map:
- property: __key__
external_name: key
export_transform: transform.key_id_or_name_as_string
Je suis en train de configurer le téléchargement/téléversement des données à l'aide bulkloader od, et je veux avoir des données aussi facile de comprendre le format (comme .csv) - - donc l'utilisation de bulkloader.py --dump (...)
n'est pas une option viable car elle me donne des fichiers sqlite3 dont le contenu des entités est décapé en une seule ligne.
EDIT
J'ai essayé de faire ce que je suggère @ Nick a obtenu une exception:
ErrorOnTransform: Numeric keys are not supported on input at this time.
Est-ce que cela signifie que je dois en tenir à bulkloader.py (qui utilise ce format werid sqlite) ou J'ai foiré quelque chose? ;)
tête de transformateur:
- 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)
entier 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.')
Merci pour la réponse. Mon problème est avec la clé primaire, est juste le nom de la fonction 'create_foreign_key' trompeur? –
Le nom est trompeur - il devrait probablement être simplement 'create_key'. –
OK :) Je vais essayer le plus vite possible! –