J'envisage d'utiliser Django pour un projet que je démarre (pour info, un jeu basé sur un navigateur) et l'une des fonctionnalités que j'apprécie le plus est l'utilisation de la fonction syncdb
pour créer automatiquement les tables de la base de données en fonction des modèles Django que je définis (une fonctionnalité que je n'arrive à trouver dans aucun autre framework). Je me disais déjà que c'était trop beau pour être vrai quand j'ai vu ceci dans la section documentation :
Syncdb ne modifiera pas les tables existantes
syncdb ne créera des tables que pour les modèles qui n'ont pas encore été installés. Il n'émettra jamais d'instructions ALTER TABLE pour correspondre aux modifications apportées à une classe de modèle après l'installation. Les modifications apportées aux classes de modèles et aux schémas de bases de données impliquent souvent une certaine forme d'ambiguïté et, dans ces cas, Django doit deviner les modifications correctes à apporter. Il y a un risque que des données critiques soient perdues dans le processus.
Si vous avez apporté des modifications à un modèle et que vous souhaitez modifier les tables de la base de données pour qu'elles correspondent, utilisez la commande sql pour afficher la nouvelle structure SQL et la comparer à votre schéma de table existant pour effectuer les modifications.
Il semble que la modification des tableaux existants doive être effectuée "à la main".
Ce que je voudrais savoir, c'est la meilleure façon de procéder. Deux solutions me viennent à l'esprit :
- Comme le suggère la documentation, effectuez les changements manuellement dans la BD ;
- Faire une sauvegarde de la base de données, l'effacer, créer à nouveau les tables (avec syncdb, puisque maintenant il crée les tables à partir de zéro) et importer les données sauvegardées (cela peut prendre trop de temps si la base de données est grande).
Des idées ?