132

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
3cheesewheel
  • 9,133
  • 9
  • 39
  • 59
Prem
  • 3,373
  • 7
  • 29
  • 43
  • Possible duplicate of [What is the easiest way to clear a database from the CLI with manage.py in Django?](http://stackoverflow.com/questions/6485106/what-is-the-easiest-way-to-clear-a-database-from-the-cli-with-manage-py-in-djang) – Ciro Santilli OurBigBook.com May 13 '16 at 21:39

11 Answers11

187

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

python manage.py help flush
robertklep
  • 198,204
  • 35
  • 394
  • 381
  • 4
    Unfortunately this does not work on individual apps like manage.py reset did. It results in an error: CommandError: Command doesn't accept any arguments – Andre May 06 '13 at 19:20
  • 5
    Luckily, [someone ported it back](https://github.com/gregmuellegger/django-reset) to 1.5 :) – robertklep May 06 '13 at 19:23
  • thanks, good to know, recent (last modified 6 months ago) public django documentation about fixtures still (2019-07-11) talks about 'reset': https://code.djangoproject.com/wiki/Fixtures – Christoph Lösch Jul 11 '19 at 21:43
40

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.

Two ways I've found to drop all tables, both require something other than core django.

If you're on Heroku, drop all the tables with pg:reset:

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

If you can install Django Extensions, it has a way to do a complete reset:

python ./manage.py reset_db --router=default
LisaD
  • 2,264
  • 2
  • 24
  • 24
27

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.

python ./manage.py reset_db

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

Håken Lid
  • 22,318
  • 9
  • 52
  • 67
aendra
  • 5,286
  • 3
  • 38
  • 57
  • 1
    This was what I was looking for, but I didn't have to provide a `--router` argument, maybe that's optional now, five years later? :) – damd Aug 22 '18 at 11:08
25

if you are using Django 2.0 Then

python manage.py flush 

will work

Vaibhav Gupta
  • 650
  • 7
  • 15
20

If you want to clean the whole database, you can use:

python manage.py flush

If you want to clean the database table of a Django app, you can use:

python manage.py migrate <app-name> zero
Javad
  • 2,033
  • 3
  • 13
  • 23
Abhijeet Padhy
  • 201
  • 2
  • 3
  • Although the question is old, this should be the accepted answer. There's no need for django-extensions when migrate zero works fine. – DjangoDev1 Jan 29 '21 at 01:22
13

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.

Gursimran Singh
  • 301
  • 2
  • 5
  • 1
    if using sqlite, no need to manually create the database, `python3 manage.py makemigrations` and `python3 manage.py migrate` will take care of that, at least in django 2.0 – toto_tico Jan 23 '18 at 13:16
5
python manage.py flush

deleted old db contents,

Don't forget to create new superuser:

python manage.py createsuperuser
Thusitha Deepal
  • 1,392
  • 12
  • 19
4

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
yask
  • 3,918
  • 4
  • 20
  • 29
3

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.

Community
  • 1
  • 1
Jan
  • 42,290
  • 8
  • 54
  • 79
3
  1. Just manually delete you database. Ensure you create backup first (in my case db.sqlite3 is my database)

  2. Run this command manage.py migrate

Eric Aya
  • 69,473
  • 35
  • 181
  • 253
bikram
  • 7,127
  • 2
  • 51
  • 63
0

I use python manage.py flush on django 4.1 with postreSQL

smeric
  • 71
  • 7