Qual é a maneira mais fácil de limpar um banco de dados a partir do CLI com manage.py em Django?

Estou a usar o Django para construir um site com o MySQL. Agora como eu estou aprendendo, então eu preciso mudar o modelo muitas vezes para que eu quero que todas as tabelas sejam limpas e nova tabela seja criada.

Mas {[[0]} não toca nas tabelas existentes. Há alguma maneira melhor de lidar com este problema?

Author: guaka, 2011-06-26

4 answers

Se não se importar com os dados:

A melhor maneira seria largar a base de dados e correr de novo. Ou pode correr:

Para Django > = 1, 5

python manage.py flush

Para Django

python manage.py reset appname

(pode adicionar --no-input ao fim do comando para que ele ignore a linha de comandos interactiva.)

Se se importar com os dados:

Dos documentos:

O Syncdb só irá criar tabelas para modelos que ainda não foram fornecer. Nunca irá alterar TABELA declarações a corresponder às alterações feitas para uma classe de modelo após a instalação. Alterações às classes de modelos e à base de dados os esquemas envolvem muitas vezes alguma forma de ambiguidade e, nesses casos, Django teria de adivinhar o correcto. mudanças a fazer. Há um risco de que dados críticos seriam perdidos no processo.

Se fez alterações a um modelo e deseja alterar as tabelas da base de dados para corresponder, use o comando sql para mostrar a nova estrutura SQL e compare isso com o seu quadro existente esquema para resolver as mudanças.

Https://docs.djangoproject.com/en/dev/ref/django-admin/

Referência: FAQ - https://docs.djangoproject.com/en/dev/faq/models/#if-i-make-changes-to-a-model-how-do-i-update-the-database

As pessoas também recomendam o sul ( http://south.aeracode.org/docs/about.html#key-features mas ainda não experimentei.

 108
Author: manojlds, 2013-08-28 00:06:27

Usando as extensões Django , em execução:

./manage.py reset_db

Irá limpar as tabelas da base de dados, depois executando:

./manage.py syncdb

Irá recriá-los (o sul pode pedir-lhe para migrar coisas).

 3
Author: mrmagooey, 2014-04-15 04:13:54

Eu acho que Django docs {[[6]} mencionam explicitamente que se a intenção é começar de novo a partir de um DB vazio (que parece ser a intenção do OP), então basta largar e recriar a base de dados e executar de novo {[[0]} (em vez de usar flush):

Se preferires começar a partir de uma base de dados vazia e repetir tudo migrações, você deve largar e recriar a base de dados e então executar migre em vez disso.

Então, para o caso da OP, só precisamos de ...
  1. larga a base de dados de MySQL
  2. recriar a base de Dados
  3. corre python manage.py migrate
 2
Author: Anupam, 2018-01-30 09:58:23

O MAIS RÁPIDO (cai e cria todas as tabelas, incluindo dados):

./manage.py reset appname | ./manage.py dbshell

Cuidado:

  • pode não funcionar correctamente nas janelas.
  • pode manter algumas tabelas antigas no db
 0
Author: Udi, 2011-06-26 23:14:23