Si vous ne vous souciez pas des données:
Le meilleur moyen serait de supprimer la base de données et de l'exécuter à syncdb
nouveau. Ou vous pouvez exécuter:
Pour Django> = 1,5
python manage.py flush
Pour Django <1.5
python manage.py reset appname
(vous pouvez ajouter --no-input
à la fin de la commande pour qu'elle ignore l'invite interactive.)
Si vous vous souciez des données:
À partir de la documentation:
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èle et aux schémas de base de données impliquent souvent une certaine forme d'ambiguïté et, dans ces cas, Django devrait deviner les modifications correctes à apporter. Il y a un risque que des données critiques soient perdues au cours du processus.
Si vous avez apporté des modifications à un modèle et 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 comparez-la à votre schéma de table existant pour déterminer les modifications.
https://docs.djangoproject.com/en/dev/ref/django-admin/
Référence: FAQ - https://docs.djangoproject.com/en/dev/faq/models/#if-i-make-changes-to-a-model-how-do-i-update-the-database
Les gens recommandent également South ( http://south.aeracode.org/docs/about.html#key-features ), mais je ne l'ai pas essayé.
flush
. essayez d'utiliserpython manage.py flush
oupython manage.py flush --noinput
pour ignorer l'invite interactive.django-admin flush
selon la documentationUtilisation des extensions Django , exécution:
Effacera les tables de la base de données, puis exécutera:
Va les recréer (le sud peut vous demander de migrer les choses).
la source
Je pense que les documents Django mentionnent explicitement que si l'intention est de recommencer à partir d'une base de données vide (ce qui semble être l'intention d'OP), alors supprimez et recréez la base de données et réexécutez
migrate
(au lieu d'utiliserflush
):Donc, pour le cas d'OP, il suffit de:
python manage.py migrate
la source
Le plus rapide (supprime et crée toutes les tables, y compris les données):
./manage.py reset appname | ./manage.py dbshell
Mise en garde:
la source
reset
exécute déjà le SQL, donc pas besoin de diriger versdbshell
. Si vous utilisez lasqlreset
commande, cela afficherait simplement le SQL, que vous pourriez diriger vers le shell pour exécution, mais c'est une étape inutile.Vous pouvez utiliser la bibliothèque Django-Truncate pour supprimer toutes les données d'une table sans détruire la structure de la table.
Exemple:
settings.py
fichier:INSTALLED_APPS = [ ... 'django_truncate', ]
la source