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

Respostas:


151

resetfoi substituído por flushDjango 1.5, consulte:

python manage.py help flush

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

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.


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


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


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.


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

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.


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.