186 votes

Comment supprimer toutes les données d'un tableau à l'aide de Django ?

J'ai deux questions :

  1. Comment supprimer une table dans Django ?
  2. Comment supprimer toutes les données du tableau ?

Voici mon code, qui ne fonctionne pas :

Reporter.objects.delete()

0 votes

Depuis l'interface CLI : stackoverflow.com/questions/6485106/

217voto

Tiago Points 3578

A l'intérieur d'un manager :

def delete_everything(self):
    Reporter.objects.all().delete()

def drop_table(self):
    cursor = connection.cursor()
    table_name = self.model._meta.db_table
    sql = "DROP TABLE %s;" % (table_name, )
    cursor.execute(sql)

7 votes

De même, si vous utilisez la méthode delete_everything(), prenez garde à ce bogue : code.djangoproject.com/ticket/16426

1 votes

Si cela répond à la première question, cela ne répond pas à la seconde. J'utiliserais 'DELETE FROM %s' % (table_name, ) pour ce morceau, laissant la table vide mais intacte.

150voto

Ash Points 1294

Selon les derniers documentation la méthode correcte à appeler serait :

Reporter.objects.all().delete()

11 votes

Oui, mais cela ne fonctionne pas si vous avez beaucoup d'enregistrements dans la table. J'ai donc dû procéder comme suit : for x in MyTable.objects.all().iterator() : x.delete()

2 votes

@max Notez toutefois qu'avec cette méthode, la valeur de l'instance delete est appelée, alors qu'avec la méthode delete l'appel sur le QuerySet ça ne l'est pas.

54voto

user2817997 Points 351

Si vous voulez supprimer toutes les données de toutes vos tables, vous pouvez essayer la commande python manage.py flush . Cela supprimera toutes les données de vos tables, mais les tables elles-mêmes existeront toujours.

Plus d'informations ici : https://docs.djangoproject.com/en/1.8/ref/django-admin/

32 votes

Il aurait été utile que vous mentionniez que cela supprime également votre super-utilisateur.

39 votes

Il a bien dit "toutes les données de toutes vos tables", ce qui devrait indiquer que c'est une opération très destructive.

2 votes

La table User se trouve dans la même base de données que "vos" tables. Vous devriez le savoir avant d'utiliser une telle opération.

41voto

Mangy 007 Points 476

Utilisation du shell,

1) Pour supprimer le tableau :

python manage.py dbshell
>> DROP TABLE {app_name}_{model_name}

2) Pour supprimer toutes les données de la table :

python manage.py shell
>> from {app_name}.models import {model_name}
>> {model_name}.objects.all().delete()

6voto

Rohit Dhankar Points 155

Django 1.11 supprime tous les objets d'une table de la base de données - -.

Entry.objects.all().delete()  ## Entry being Model Name. 

Reportez-vous à la documentation officielle de Django, citée ci-dessous. https://docs.djangoproject.com/en/1.11/topics/db/queries/#deleting-objects

Notez que delete() est la seule méthode QuerySet qui n'est pas exposée sur un gestionnaire lui-même. Il s'agit d'un mécanisme de sécurité pour éviter que vous ne demandiez accidentellement Entry.objects.delete(), et que vous supprimiez toutes les entrées. Si vous souhaitez supprimer tous les objets, vous devez demander explicitement un ensemble de requêtes complet :

J'ai moi-même essayé l'extrait de code ci-dessous dans mon fichier somefilename.py

    # for deleting model objects
    from django.db import connection
    def del_model_4(self):
        with connection.schema_editor() as schema_editor:
            schema_editor.delete_model(model_4)

et dans mon views.py J'ai une vue qui rend simplement une page html ...

  def data_del_4(request):
      obj = calc_2() ## 
      obj.del_model_4()
      return render(request, 'dc_dash/data_del_4.html') ## 

il a fini par supprimer toutes les entrées de - modèle == modèle_4 , mais maintenant je dois voir un écran d'erreur dans la console d'administration quand j'essaie d'asceratin que tous les objets de modèle_4 ont été supprimés ....

ProgrammingError at /admin/dc_dash/model_4/
relation "dc_dash_model_4" does not exist
LINE 1: SELECT COUNT(*) AS "__count" FROM "dc_dash_model_4" 

Considérez que si nous n'allons pas dans la console ADMIN pour essayer de voir les objets du modèle - qui ont déjà été supprimés - l'application Django fonctionne comme prévu.

capture d'écran de l'administration de django

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X