Django: Como desinstalar completamente um aplicativo Django?

109

Qual é o procedimento para desinstalar completamente um aplicativo Django, completo com a remoção do banco de dados?

zer0stimulus
fonte
remova o nome desse aplicativo dos aplicativos settings.py instalados e, em seguida, remova qualquer link para esse aplicativo do arquivo urls.py principal. Então, você pode excluir esse aplicativo com segurança
Aseem de
Se você estiver em desenvolvimento usando SQLite e não se importar em redefinir o banco de dados, não há problema em apenas remover a pasta do aplicativo e db.sqlite3, e removê-la de INSTALLED_APPSdentro settings.py?
Kevin

Respostas:

150
  1. Django <1.7 tem um comando de gerenciamento útil que fornecerá o SQL necessário para eliminar todas as tabelas de um aplicativo. Veja a documentação sqlclear para mais informações. Basicamente, a execução ./manage.py sqlclear my_app_namefaz com que você obtenha as instruções SQL que devem ser executadas para eliminar todos os rastros do aplicativo em seu banco de dados. Você ainda precisa copiar e colar (ou canalizar) essas instruções em seu cliente SQL. Para Django 1.7 e superior, use ./manage.py migrate my_app_name zero(veja os documentos de migração ), que executa a limpeza do banco de dados automaticamente.

  2. Para remover o aplicativo do seu projeto, tudo o que você precisa fazer é removê-lo do INSTALLED_APPSdo seu projeto settings.py. Django não irá mais carregar o aplicativo.

  3. Se você não quiser mais que os arquivos do aplicativo fiquem por aí, exclua o diretório do aplicativo do diretório do seu projeto ou outro local em seu PYTHONPATH onde ele reside.

  4. (opcional) Se o aplicativo armazenou arquivos de mídia, arquivos de cache ou outros arquivos temporários em algum lugar, você pode querer excluí-los também. Também tenha cuidado com os dados da sessão que podem ser remanescentes do aplicativo.

  5. (opcional) Eu também removeria qualquer tipo de conteúdo desatualizado.

Igual a.

from django.contrib.contenttypes.models import ContentType
for c in ContentType.objects.all():
    if not c.model_class():
        print "deleting %s"%c # print(f"deleting {c}") # for Python 3.6+
        c.delete()
Gabriel Hurley
fonte
5
Excelente resposta, apenas uma adição que eu faria: pip uninstall package-name é seu amigo, muito mais agradável do que arrastar em torno de seu PYTHONPATH.
DaveJ
25
No Django 1.7, se você usar a migração, a etapa 1 será ./manage.py migrate my_app_name zero. E também executará automaticamente o SQL.
Nathan Do
12
sqlclearfoi removido no Django 1.9, portanto, esta resposta só é válida para versões anteriores. Consulte: docs.djangoproject.com/en/1.10/releases/1.9/…
Akhorus
7
Se o aplicativo que está sendo excluído tiver migrações, das quais as migrações de outros aplicativos dependem, o sistema de migração será interrompido quando perceber que essas migrações dependentes não existem mais. Tenha cuidado ao usar a resposta acima se o aplicativo a ser excluído for uma dependência no histórico de migração de outro de seus aplicativos.
Filip Kilibarda
1
E para estar completo, você normalmente precisará remover uma referência a include("appname.urls")do projetourls.py
nigel222
16
  1. comente sobre settings.pya INSTALLED_APPSlinha do aplicativo desnecessário
  2. exclua todas as pastas __pycache__e migrateem seu projeto
  3. exclua o modelo desnecessário em models.py
  4. excluir todos os links de importaçãoviews.py , admin.pyfinalizar etc.
  5. exclua todos os links em urls.pyseus aplicativos desnecessários
  6. na base de dados apague as tabelas desnecessárias associadas à aplicação (faço-o com o programa de ajuda "Valentina Studio")
  7. excluir pasta do aplicativo
  8. na linha de comando, faça: python manage.py migrateepython manage.py syncdb
Vadim
fonte
3

O aplicativo django é um "conjunto" de arquivos * .py e um diretório com um nome do aplicativo django. Assim, você pode simplesmente excluir toda a pasta com todos os arquivos * .py

Para "remover" tabelas do banco de dados, você deve usar DELETE FROM <app-name_table-names>

Além disso, você deve excluir as linhas com o nome do aplicativo de setting.py em um diretório raiz

V-Light
fonte
Supondo que você não esteja compartilhando o banco de dados com outro aplicativo, você pode simplesmente descartar o banco de dados nomeado em settings.py.
joel3000
cada aplicativo tem seu próprio banco de dados - nada mal
V-Light
3
@ V-Light cada aplicativo tem sua própria tabela e cada projeto tem seu próprio banco de dados.
Alireza Savand
2

Eu realmente amo as etapas deste artigo - inclui suporte à migração .

Talvez precise ser adaptado em duas atualizações de código - mas parece muito seguro quando você tem que trabalhar com muitas implantações (como: estágio de teste, versão BETA e produção - no meu caso)

dannydedog
fonte
2

No meu contexto os projetos existem várias vezes: eu tenho um sistema de desenvolvimento, alguns colegas têm um sistema de desenvolvimento, existe um sistema de staging para o cliente e um sistema de produção. Isso significa que não quero executar comandos sql manualmente. Eu quero que seja automatizado.

Objetivo: Remover o aplicativo e todas as tabelas do banco de dados.

Etapa 1: esvazie o aplicativo, mas deixe-o instalado

remova todos os arquivos do aplicativo, exceto a pasta "migrações"

Execute este comando: manage.py makemigrations -n drop_all_tables my_app_to_remove

O diretório agora se parece com isto:

my_app_to_remove/
my_app_to_remove/__init__.py
my_app_to_remove/migrations
my_app_to_remove/migrations/0001_initial.py
my_app_to_remove/migrations/....
my_app_to_remove/migrations/0030_drop_all_tables.py
my_app_to_remove/migrations/__init__.py

Deixe my_app_to_removeno arquivo "settings.py".

Etapa 2: implantar as mudanças

Atualize todos os projetos. Diga aos companheiros de equipe para atualizar seu projeto e executar as migrações.

Etapa 3: remova "my_app_to_remove" de settings.py

Agora remova "my_app_to_remove" de settings.py e implante novamente.

Guettli
fonte