Como posso eliminar todas as tabelas de um banco de dados usando manage.py e linha de comando? Existe alguma maneira de fazer isso executando manage.py com parâmetros apropriados para que eu possa executá-lo a partir de um aplicativo .NET?
fonte
Como posso eliminar todas as tabelas de um banco de dados usando manage.py e linha de comando? Existe alguma maneira de fazer isso executando manage.py com parâmetros apropriados para que eu possa executá-lo a partir de um aplicativo .NET?
Pelo que eu sei, não existe um comando de gerenciamento para eliminar todas as tabelas. Se você não se importa em hackear Python, pode escrever seu próprio comando personalizado para fazer isso. Você pode achar a sqlclear
opção interessante. A documentação diz que ./manage.py sqlclear
imprime as instruções DROP TABLE SQL para os nomes de aplicativos fornecidos.
Atualização : Desavergonhadamente apropriando-se do comentário de @Mike DeSimone abaixo desta resposta para dar uma resposta completa.
./manage.py sqlclear | ./manage.py dbshell
No Django 1.9 agora é ./manage.py sqlflush
./manage.py sqlclear myAppName | ./manage.py dbshell
Não há comando de gerenciamento Django nativo para eliminar todas as tabelas. Ambos
sqlclear
ereset
exigem um nome de aplicativo.No entanto, você pode instalar extensões Django que fornecem a você
manage.py reset_db
, o que faz exatamente o que você deseja (e fornece acesso a muitos outros comandos de gerenciamento úteis).fonte
manage.py reset_db
precisa do sinalizador `-c, --close-sessions` para fechar as conexões do banco de dados antes de descartar o banco de dados (somente PostgreSQL)Se você estiver usando o pacote South para lidar com migrações de banco de dados (altamente recomendado), você pode apenas usar o
./manage.py migrate appname zero
comando.Caso contrário, eu recomendaria o
./manage.py dbshell
comando, canalizando comandos SQL na entrada padrão.fonte
python manage.py migrate <app> zero
sqlclear
foi removido do 1.9.As notas de lançamento mencionam que é devido à introdução de migrações: https://docs.djangoproject.com/en/1.9/releases/1.9/
Infelizmente, não consegui encontrar um método que funcione em todos os aplicativos ao mesmo tempo, nem uma maneira integrada de listar todos os aplicativos instalados pelo administrador: Como listar todos os aplicativos instalados com manage.py no Django?
Relacionado: Como redefinir migrações no Django 1.7?
fonte
É melhor usar
./manage.py sqlflush | ./manage.py dbshell
porque sqlclear requer aplicativo para liberar.fonte
maneira simples (?) de fazer isso em python (no mysql):
fonte
Se você deseja limpar completamente o banco de dados e sincronizá-lo novamente, você precisa de algo como o seguinte. Eu também combino a adição de dados de teste neste comando:
Seria bom poder fazer,
cursor.execute(call_command('sqlclear', 'main'))
mascall_command
imprimir o SQL em stdout em vez de retorná-lo como uma string, e eu não consigo descobrir osql_delete
código ...fonte
USE DATABASE
, recomendo que você crie um pacote django-recreate-db com um comando de gerenciamento que irá alternar automaticamente com base nas configurações para alternar entre SQLite3 e PostGresql.Aqui está um script de shell que acabei montando para lidar com esse problema. Espero que economize algum tempo.
fonte
Usando Python para fazer um comando flushproject, você usa:
fonte
flushdb
e depois lancei outro comando. se precisar em outro script, você pode usarcall_command
call_command
. Você está dizendo que eu deveria fazercall_command("flushdb")
antescall_command("syncdb")
?O comando
./manage.py sqlclear
ou./manage.py sqlflush
parece limpar a mesa e não excluí-los, no entanto, se você deseja excluir o banco de dados completo tente o seguinte:manage.py flush
.Aviso: isso excluirá seu banco de dados completamente e você perderá todos os seus dados, então se isso não for importante, vá em frente e experimente.
fonte
Aqui está um Makefile de exemplo para fazer algumas coisas boas com vários arquivos de configurações:
Então você pode fazer coisas como:
$ make db_reset
fonte
Esta resposta é para o banco de dados postgresql:
Executar: echo 'drop propriedade de some_user ' | ./manage.py dbshell
NOTA: some_user é o nome do usuário que você usa para acessar o banco de dados, consulte o arquivo settings.py:
fonte
Se você estiver usando psql e tiver django-more 2.0.0 instalado, você pode fazer
manage.py reset_schema
fonte
Aqui está uma versão de migração para o sul da resposta de @peter-g. Costumo brincar com sql bruto, então isso é útil como 0001_initial.py para qualquer aplicativo confuso. Ele só funcionará em bancos de dados que suportam
SHOW TABLES
(como o mysql). Substitua por algo comoSELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
se você usar PostgreSQL. Além disso, geralmente faço exatamente a mesma coisa para as migraçõesforwards
ebackwards
.No entanto, colegas de trabalho / cocodificadores me matariam se soubessem que fiz isso.
fonte
Há uma resposta ainda mais simples se você quiser excluir TODAS as suas tabelas. Basta ir para a pasta que contém o banco de dados (que pode ser chamado de mydatabase.db), clicar com o botão direito do mouse no arquivo .db e pressionar "excluir". Maneira antiquada, infalível de trabalhar.
fonte
Descarta todas as tabelas e as recria:
Explicação:
manage.py sqlclear
- "imprime as instruções SQL DROP TABLE para os nomes de aplicativos fornecidos"sed -n "2,$p"
- pega todas as linhas, exceto a primeira linhased -n "$ !p"
- pega todas as linhas, exceto a última linhased "s/";/" CASCADE;/"
- substitui todos os pontos-e-vírgulas (;) por (CASCADE;)sed -e "1s/^/BEGIN;/" -e "$s/$/COMMIT;/"
- insere (BEGIN;) como primeiro texto, insere (COMMIT;) como último textomanage.py dbshell
- "Executa o cliente de linha de comando para o mecanismo de banco de dados especificado em sua configuração ENGINE, com os parâmetros de conexão especificados em sua configuração USER, PASSWORD, etc."manage.py syncdb
- "Cria as tabelas de banco de dados para todos os aplicativos em INSTALLED_APPS cujas tabelas ainda não foram criadas"Dependências:
Créditos:
@Manoj Govindan e @Mike DeSimone para sqlclear canalizado para dbshell
@jpic para 'sed "s /"; / "CASCADE; /"'
fonte
use o comando "python manage.py sqlflush" no Windows 10 para outros, digite manage.py
fonte
Eu recomendo que você instale extensões django e use
python manage.py reset_db
comando. Ele faz exatamente o que você deseja.fonte