Como redefinir db no Django? Recebo um erro de comando 'reset' não encontrado

97

Seguindo este tutotrial Django por exemplo aqui: http://lightbird.net/dbe/todo_list.html

O tutorial diz:

"Isso muda o layout da nossa mesa e teremos que pedir ao Django para redefinir e recriar as tabelas:

manage.py reset todo; manage.py syncdb"

embora, quando eu corro manage.py reset todo, recebo o erro:

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

É porque estou usando sqlite3 e não postgresql?

Alguém pode me dizer qual é o comando para redefinir o banco de dados?

O comando: python manage.py sqlclear todoretorna o erro:

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

Então, adicionei 'todo' ao meu INSTALLED_APPS em settings.py e executei python manage.py sqlclear todonovamente, resultando neste erro:

$ python manage.py sqlclear todo                                      
- NameError: name 'admin' is not defined
Prem
fonte
Possível duplicata de Qual é a maneira mais fácil de limpar um banco de dados da CLI com manage.py no Django?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Respostas:

151

resetfoi substituído por flushDjango 1.5, consulte:

python manage.py help flush
robertklep
fonte
4
Infelizmente, isso não funciona em aplicativos individuais, como o manage.py reset <appname>. Isso resulta em um erro: CommandError: O comando não aceita nenhum argumento
Andre
5
Felizmente, alguém portou de volta para 1.5 :)
robertklep
Obrigado, bom saber, documentação pública recente do django sobre fixtures (última modificação 6 meses atrás) ainda (11/07/2019) fala sobre 'reset': code.djangoproject.com/wiki/Fixtures
vchrizz
34

Parece que a resposta 'liberar' funcionará para alguns casos, mas não para todos. Eu precisava não apenas liberar os valores do banco de dados, mas recriar as tabelas adequadamente. Não estou usando migrações ainda (primeiros dias), então realmente precisava descartar todas as tabelas.

Duas maneiras que descobri de eliminar todas as tabelas, ambas requerem algo diferente do core django.

Se você estiver no Heroku, elimine todas as tabelas com pg: reset:

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

Se você pode instalar extensões Django, há uma maneira de fazer uma redefinição completa:

python ./manage.py reset_db --router=default
LisaD
fonte
6
@jonalv, você tem que instalar as extensões django primeiro.
edjroot
6
Além disso, você precisa incluí-lo INSTALLED_APPSem settings.py.
Max Candocia
21

Semelhante à resposta do LisaD, as extensões do Django têm um ótimo comando reset_db que elimina totalmente tudo, ao invés de apenas truncar as tabelas como o "flush" faz.

python ./manage.py reset_db

O simples esvaziamento das tabelas não corrigia um erro persistente que ocorria quando eu estava excluindo objetos. Fazer um reset_db corrigiu o problema.

Aendrew
fonte
1
Era isso que eu procurava, mas não precisei --routerargumentar, talvez isso seja opcional agora, cinco anos depois? :)
maldito
17

se você estiver usando Django 2.0, então

python manage.py flush 

vai funcionar

Vaibhav Gupta
fonte
11

Se você quiser limpar todo o banco de dados, você pode usar: python manage.py flush Se você quiser limpar a tabela do banco de dados de um aplicativo Django, você pode usar: python manage.py migrate appname zero

Abhijeet Padhy
fonte
9

Com o django 1.11, simplesmente exclua todos os arquivos de migração da migrationspasta de cada aplicativo (todos os arquivos exceto __init__.py). Então

  1. Elimine manualmente o banco de dados.
  2. Crie manualmente o banco de dados.
  3. Corra python3 manage.py makemigrations.
  4. Corra python3 manage.py migrate.

E voilla, seu banco de dados foi completamente reiniciado.

Gursimran Singh
fonte
se estiver usando sqlite, não há necessidade de criar manualmente o banco de dados, python3 manage.py makemigrationse python3 manage.py migratecuidará disso, pelo menos no django 2.0
toto_tico
4

Para mim, isso resolveu o problema.

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
fonte
3

Apenas um acompanhamento à resposta de @ LisaD .
A partir de 2016 ( Django 1.9), você precisa digitar:

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

Isso lhe dará um novo banco de dados dentro do Heroku.

Jan
fonte
1
  1. Apenas exclua manualmente seu banco de dados. Certifique-se de criar o backup primeiro (no meu caso, db.sqlite3 é meu banco de dados)

  2. Execute este comando manage.py migrate

Bikram
fonte
1
python manage.py flush

excluiu conteúdos antigos de banco de dados,

Não se esqueça de criar um novo superusuário:

python manage.py createsuperuser
Assimitha Deepal
fonte