web-dev-qa-db-fra.com

Comment supprimer une table de SQLite3 dans DJango?

J'ai fait un modèle et j'ai exécuté python manage.py syncdb. Je pense que cela a créé une table dans la base de données. Ensuite, j'ai réalisé que j'avais fait une colonne de manière incorrecte, donc je l'ai changé et j'ai exécuté la même commande, pensant qu'elle supprimerait l'ancienne table et en ajouterait une nouvelle.

Ensuite, je suis allé à python manage.py Shell, et j'ai essayé d'exécuter .objects.all (), et il a échoué, disant que la colonne n'existe pas.

Je veux effacer l'ancienne table, puis réexécuter syncdb, mais je ne sais pas comment procéder.

49
Alex

Une autre façon simple de le faire en utilisant Django 1.4 ou inférieur, serait

python manage.py reset app_name

qui supprime et recrée les tables utilisées par les modèles de cette application.

Ceci était obsolète dans Django 1.3 et n'est plus disponible depuis Django 1.5

38
Ofri Raviv

effacer une application est aussi simple que d'écrire:

./manage.py sqlclear app_name | ./manage.py dbshell 

puis pour reconstruire vos tables il suffit de taper:

./manage.py syncdb
69
Adrián Deccico

Aucune des réponses ne montre comment supprimer une seule table dans une application. Ce n'est pas trop difficile. La commande dbshell connecte l'utilisateur au shell sqlite3.

python manage.py dbshell

Lorsque vous êtes dans le shell, tapez la commande suivante pour voir la structure de votre base de données. Cela vous montrera tous les noms de table dans la base de données (ainsi que les noms de colonne dans les tables).

SELECT * FROM sqlite_master WHERE type='table';

En général, Django nomme les tables selon la convention suivante: "appname_modelname". Par conséquent, la requête SQL qui atteint votre objectif ressemblera à ce qui suit:

DROP TABLE appname_modelname;

Cela devrait être suffisant, même si la table avait des relations avec d'autres tables. Vous pouvez maintenant vous déconnecter de SQLITE Shell en exécutant:

.exit

Si vous exécutez à nouveau syncdb, Django reconstruira la table en fonction de votre modèle. De cette façon, vous pouvez mettre à jour vos tables de base de données sans perdre toutes les données de l'application. Si vous rencontrez ce problème, un beaucoup, pensez à utiliser South - une application Django qui fera migrer vos tables pour vous.

37
iamio

obtenir les instructions DROP avec

python manage.py sqlclear app_name

puis essayez

python manage.py dbshell

et exécutez l'instruction DROP

consultez http://docs.djangoproject.com/en/dev/ref/Django-admin/

25
George Godik

J'ai eu le même problème.

Pour une résolution rapide (si vous ne vous souciez pas de perdre vos tables/données), corrigez votre fichier models.py avec les types de données souhaités, supprimez le dossier Migration et le fichier db.SQLite3,

puis réexécutez les commandes suivantes:

  1. python manage.py migrate
  2. python manage.py makemigrations
  3. python manage.py migrate
  4. python manage.py crée un superutilisateur (pour créer un utilisateur administrateur/pswd pour gérer la page d'administration)
  5. python manage.py runserver
18
Kat Russo

Dans Django 1.9 J'ai dû faire les étapes de Kat Russo, mais la deuxième migration était un peu délicate. Vous devez exécuter

./manage.py migrate --run-syncdb
1
Schdiewie Kay

Dans Django 2.1.7, j'ai ouvert le db.sqlite3 fichier dans navigateur SQLite (il existe également un package Python sur Pypi ) et supprimé la table à l'aide de la commande

DROP TABLE appname_tablename;

puis

DELETE FROM Django_migrations WHERE App='appname';

Ensuite, exécutez à nouveau

python manage.py makemigrations appname
python manage.py migrate appname
0
Premysl Vorac