Django 1.6:清除一张表中的数据

问题描述 投票:0回答:5

我有一个名为 UGC 的表,我想清除该表中的所有数据。我不想重置整个应用程序,这也会删除所有其他模型中的所有数据。是否可以只清除一个模型?如果有帮助的话,我还在我的应用程序中配置了 South。

python database django models
5个回答
6
投票

您可以 使用原始 SQL :

 cursor.execute(“DROP TABLE UGC”)

或者您可以直接在 Django shell 中使用 ORM:

UGCModel.objects.all().delete()

那会删除数据(但不是表格),所以你必须小心:)

另一种方法(为了完整性和使用 South)是在模型声明中注释掉模型,迁移然后再放回去(假设没有模型引用它。)

HTH


2
投票

在管理界面中,您可以转到该模型的列表页面,然后您可以选择所有模型并使用表格顶部的

Delete selected ...
操作。

请记住,无论您以何种方式删除数据,外键默认为

ON DELETE CASCADE
,因此任何具有您要删除的模型的外键的模型也将被删除。管理界面将为您提供将要删除的模型的完整概览。


0
投票

今天使用 django 2.0.2 遇到了这样的问题,因为我创建了我的模型

class Front(models.Model):
    pass

并迁移了它但是当我后来更新模型时,我无法运行

python manage.py makemigrations
因为它在说

You are trying to add a non-nullable field 'update' to front without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows 
with a null value for this column)
 2) Quit, and let me add a default in models.py
Select an option:

我的解决方案是什么?

  1. 我选择选项2,即退出
  2. 我注释掉了麻烦的模型/表,在我的例子中是
    Front
  3. 我运行
    python manage.py makemigrations
    删除了麻烦的表/模型
  4. 我取消注释我的模型并再次运行
    python manage.py makemigrations
    重新创建表/模型,最后
  5. 我用
    python manage.py migrate
    迁移了我的更改,一切都解决了!

注意:小心上面的指令,因为它会删除表/模型的所有引用/外键,默认为

on_delete=models.CASCADE


0
投票

Django 3.1.14

如果您有兴趣在命令行上执行此操作,并且您将经常对数据库进行这种类型的清理,我会这样做:

# project_name/app_name/management/commands/clear_test_models.py

from django.core.management.base import BaseCommand
from django.apps import apps

keep_models = ['KeepModel0', 'KeepModel1']

class Command(BaseCommand):
    """
        clear all in app_name app except listed in keep_models list
    """
    help = 'clear all models except those listed in keep_models list'

    def handle(self, *args, **kwargs):
        my_app = apps.get_app_config('app_name')
        my_models = my_app.get_models()
        for model in my_models:
            if model.__name__ not in keep_models:
                model.objects.all().delete()

在命令行上运行:

DJANGO_SETTINGS_MODULE=app_name.settings.local python manage.py clear_test_models

0
投票

您可以使用 Django shell 执行此操作:

>>> py manage.py shell
>>> from [your_app].models import [Your_Model] as md
>>> md.objects.all().delete()
>>> exit()

记得将 [your_app] 替换为应用名称,将 [Your_Model] 替换为您要从数据库中清除的模型名称。

请记住,这将删除表中的数据,但不会删除表本身。如果你想做后者,你需要放下桌子。

© www.soinside.com 2019 - 2024. All rights reserved.