Cómo eliminar todos los datos en una tabla usando Django

Respuestas:

139

Dentro de un gerente:

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)
Tiago
fuente
3
Además, si utiliza el método delete_everything (), tenga cuidado con este error: code.djangoproject.com/ticket/16426
David Planella
1
Si bien esto responde a la primera pregunta, no responde a la segunda pregunta. Yo usaría 'DELETE FROM %s' % (table_name, )para ese bit, dejando la mesa vacía pero intacta.
user3934630
93

Según la última documentación , el método correcto para llamar sería:

Reporter.objects.all().delete()
Ceniza
fuente
3
Sí, pero esto se elimina si tiene muchos registros en la tabla. así que tuve que hacerlo como: para x en MyTable.objects.all (). iterator (): x.delete ()
max
2
@max Sin embargo, tenga en cuenta que con esto, deletese llama al método de la instancia , mientras que con la deletellamada QuerySetno lo es.
alxs
19

Si desea eliminar todos los datos de todas sus tablas, es posible que desee probar el comando python manage.py flush. Esto eliminará todos los datos de sus tablas, pero las tablas en sí seguirán existiendo.

Vea más aquí: https://docs.djangoproject.com/en/1.8/ref/django-admin/

usuario2817997
fuente
19
Hubiera sido útil para usted mencionar que también elimina a su superusuario
Aurielle Perlmann
15
Dijo "todos los datos de todas sus tablas", lo que debería indicar que es una operación muy destructiva.
Jordania
6

Usando shell,

1) Para eliminar la tabla:

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

2) Para eliminar todos los datos de la tabla:

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

Django 1.11 elimina todos los objetos de una tabla de base de datos -

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

Consulte la documentación oficial de Django aquí como se cita a continuación: https://docs.djangoproject.com/en/1.11/topics/db/queries/#deleting-objects

Tenga en cuenta que delete () es el único método QuerySet que no está expuesto en un administrador. Este es un mecanismo de seguridad para evitar que solicite Entry.objects.delete () accidentalmente y elimine todas las entradas. Si desea eliminar todos los objetos, debe solicitar explícitamente un conjunto de consultas completo:

Yo mismo probé el fragmento de código que se ve a continuación dentro de mi 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)

y dentro de mi views.pytengo una vista que simplemente muestra una página html ...

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

terminó eliminando todas las entradas de - model == model_4, pero ahora puedo ver una pantalla de error dentro de la consola de administración cuando trato de determinar que todos los objetos de model_4 se han eliminado ...

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" 

Tenga en cuenta que, si no vamos a la Consola ADMIN y tratamos de ver los objetos del modelo, que ya se han eliminado, la aplicación Django funciona como se esperaba.

captura de pantalla de administrador de django

Rohit Dhankar
fuente
1

Hay un par de maneras:

Para eliminarlo directamente:

SomeModel.objects.filter(id=id).delete()

Para eliminarlo de una instancia:

instance1 = SomeModel.objects.get(id=id)
instance1.delete()

// no uses el mismo nombre

Ashish Gupta
fuente