mise à jour de django base de données pour refléter les changements dans les modèles existants
J'ai déjà défini un modèle et a créé sa base de données associée via manager.py syncdb
. Maintenant que j'ai ajouté des champs pour le modèle, j'ai essayé syncdb
à nouveau, mais pas de sortie s'affiche. Lors de la tentative d'accès à ces nouveaux champs à partir de mes modèles, je reçois un "Non Telle Colonne" exception, m'amenant à croire que syncdb n'ai pas fait de mise à jour de la base de données. Quel est le bon de commande ici?
- Vous devriez changer la accepté de répondre.
Vous devez vous connecter pour publier un commentaire.
Semble correspondre à ce que vous avez besoin est un système de migration. Sud est vraiment sympa, fonctionne très bien, a une certaine automatisation des outils afin de faciliter votre flux de travail. Et a une grande tutoriel.
remarque: syncdb ne pouvez pas mettre à jour vos tables existantes. Parfois, il est impossible de décider quoi faire automagicly - c'est pourquoi sud scripts sont cette grande.
Une autre option, ne nécessitant pas d'applications supplémentaires, est d'utiliser le construit en
manage.py
fonctions d'export de vos données, effacer la base de données et restaurer les données exportées.Les méthodes ci-dessous permettra de mettre à jour les tables de base de données pour votre application, mais détruire complètement toutes les données qui existaient dans ces tableaux. Si les modifications que vous avez apportées à votre modèle d'application ne cassez pas votre ancien schéma (par exemple, vous avez ajouté un nouveau champ facultatif) vous pouvez il suffit de vider les données avant et de le recharger par la suite, comme suit:
Django 1.4.15 et plus tôt
Django 1.5 et versions plus récentes
(Le
reset
commande a été dépréciée, puis supprimé en Django 1.5)Si vos modifications casser votre ancien schéma cela ne fonctionne pas - dans ce cas, des outils comme Sud ou Django Évolution sont grands.
migrations
De Django 1.7, vous pouvez maintenant le faire avec native migrations. Il suffit d'exécuter
De Django reinhardt, syncdb ne pas modifier les tables existantes dans la base de données de sorte que vous devez le faire manuellement. La façon dont je le fais toujours c'est:
Si vous utilisez sqllite, un bon manager est le plugin firefox: lien
Un autre outil serait django évolution. Pas de table abandon nécessaire dans la plupart des cas.
django évolution
Il suffit de l'installer comme n'importe quelle autre django application et de l'exécution:
python manage.py évoluer soupçon --exécuter
deseb est un outil idéal pour cela.
L'avoir installé, vous pouvez écrire ./manage.py sqlevolve et il va générer des commandes sql nécessaires pour maintenir la structure de base de données en synchronisation avec vos modèles.
Vous avez besoin de déplacer vos tables avant de vous pouvez les recréer avec
syncdb
.Si vous voulez préserver vos données, alors vous devez décharger votre base de données,
déposer vos tables, exécuter
syncdb
de construire une nouvelle base de données, puis de recharger vos anciennes données dans votre nouveau tables de.Il existe des outils qui aident à l'. Cependant, dans de nombreux cas, il est tout aussi facile de le faire manuellement.
Pour les versions 1.4.1 et au-dessus des utilisateurs la commande a changé de
Veuillez lire la document officiel avant de l'utiliser comme il va supprimer toutes vos données.
syncdb
a été exécuté, mais qu'en est potentiellement nouveaux champs ajoutés ? Ils ne sont pas créées