Home » Django » How to reset db in Django? I get a command 'reset' not found error

How to reset db in Django? I get a command 'reset' not found error

Posted by: admin November 30, 2017 Leave a comment

Questions:

Following this Django by Example tutotrial here: http://lightbird.net/dbe/todo_list.html

The tutorial says:

“This changes our table layout and we’ll have to ask Django to reset
and recreate tables:

manage.py reset todo; manage.py syncdb

though, when I run manage.py reset todo, I get the error:

$ python manage.py reset todo                                       
- Unknown command: 'reset'

Is this because I am using sqlite3 and not postgresql?

Can somebody tell me what the command is to reset the database?

The command: python manage.py sqlclear todo returns the error:

$ python manage.py sqlclear todo    
CommandError: App with label todo could not be found.    
Are you sure your INSTALLED_APPS setting is correct?

So I added ‘todo’ to my INSTALLED_APPS in settings.py, and ran python manage.py sqlclear todo again, resulting in this error:

$ python manage.py sqlclear todo                                      
- NameError: name 'admin' is not defined
Answers:

reset has been replaced by flush with Django 1.5, see:

python manage.py help flush

Questions:
Answers:

It looks like the ‘flush’ answer will work for some, but not all cases. I needed not just to flush the values in the database, but to recreate the tables properly. I’m not using migrations yet (early days) so I really needed to drop all the tables.

On Heroku one can drop all the tables with pg:reset:

heroku pg:reset DATABASE_URL
heroku run python manage.py syncdb

And although manage.py ‘reset’ was replaced with ‘flush’, Django Extensions has a way to still do a complete reset:

python ./manage.py reset_db --router=default

Questions:
Answers:

Similar to LisaD’s answer, Django Extensions has a great reset_db command that totally drops everything, instead of just truncating the tables like “flush” does. You have to specify a router, so it may look like:

python ./manage.py reset_db --router=default

Merely flushing the tables wasn’t fixing a persistent error that occurred when I was deleting objects. Doing a reset_db fixed the problem.

Questions:
Answers:

For me this solved the problem.

heroku pg:reset DATABASE_URL

heroku run bash
>> Inside heroku bash
cd app_name && rm -rf migrations && cd ..
./manage.py makemigrations app_name
./manage.py migrate

Questions:
Answers:

If you want to clean the whole database, you can use:
python manage.py flush
If you want to clean database table of a Django app, you can use:
python manage.py migrate appname zero

Questions:
Answers:

With django 1.11, simply delete all migration files from the migrations folder of each application (all files except __init__.py). Then

  1. Manually drop database.
  2. Manually create database.
  3. Run python3 manage.py makemigrations.
  4. Run python3 manage.py migrate.

And voilla, your database has been completely reset.

Questions:
Answers:

Just a follow up to @LisaD’s answer.
As of 2016 (Django 1.9), you need to type:

heroku pg:reset DATABASE_URL
heroku run python manage.py makemigrations
heroku run python manage.py migrate

This will give you a fresh new database within Heroku.

Leave a Reply

Your email address will not be published. Required fields are marked *