[Django]-Django 1.6: Clear data in one table

6👍

You could use raw SQL :

 cursor.execute(“DROP TABLE UGC”)

or you could just use the ORM directly inside a Django shell :

UGCModel.objects.all().delete()

That would erase the data (not the table, though), so you have to be careful 🙂

Another way (for completeness and to make use of South) would be to comment out the model in your models declaration, migrate and then put it back again (assuming there are no models with a reference to it.)

HTH

2👍

In the admin interface, you can go to the list page for that model, then you can select all models and use the Delete selected ... action at the top of the table.

Remember that, in whatever way you delete the data, foreign keys default to ON DELETE CASCADE, so any model with a foreign key to a model you want to delete will be deleted as well. The admin interface will give you a complete overview of models that will be deleted.

👤knbk

0👍

Faced such issues today with django 2.0.2 because i created my model with

class Front(models.Model):
    pass

and migrated it but when i later updated the model, i couldn’t run
python manage.py makemigrations because it was saying

You are trying to add a non-nullable field 'update' to front without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows 
with a null value for this column)
 2) Quit, and let me add a default in models.py
Select an option:

What was my solution?

  1. I choose option 2 which is to quit
  2. I commented out the troublesome model/table which is Front in my case
  3. I ran python manage.py makemigrations which deleted the troublesome table/model
  4. I uncommented my model and ran python manage.py makemigrations again which recreated the table/model and finally
  5. I migrated my changes with python manage.py migrate and everyhing was resolved!

Note: Be careful with the above instruction cause it will delete all references/foreign keys to the table/model with on_delete=models.CASCADE which is the default!

0👍

Django 3.1.14

If you’re interested in doing it on the command line, and you’ll be doing this type of cleaning of your db frequently, I do this:

# project_name/app_name/management/commands/clear_test_models.py

from django.core.management.base import BaseCommand
from django.apps import apps

keep_models = ['KeepModel0', 'KeepModel1']

class Command(BaseCommand):
    """
        clear all in app_name app except listed in keep_models list
    """
    help = 'clear all models except those listed in keep_models list'

    def handle(self, *args, **kwargs):
        my_app = apps.get_app_config('app_name')
        my_models = my_app.get_models()
        for model in my_models:
            if model.__name__ not in keep_models:
                model.objects.all().delete()

To run on the command line:

DJANGO_SETTINGS_MODULE=app_name.settings.local python manage.py clear_test_models

0👍

You can do this using the Django shell:

>>> py manage.py shell
>>> from [your_app].models import [Your_Model] as md
>>> md.objects.all().delete()
>>> exit()

Remember to replace [your_app] with the app name and [Your_Model] with the name of the model you want to clear from the database.

Keep in mind this will remove the data in the table but not the table itself. If you wanted to do the latter you’d need to drop the table.

Leave a comment