Django 1.6:清空一个表的数据

3 投票
5 回答
4526 浏览
提问于 2025-04-18 11:10

我有一个叫UGC的表格,想把里面的所有数据清空。我不想重置整个应用,因为那样会把其他所有模型的数据也删掉。请问只清空一个模型的数据可以吗?我还在我的应用中配置了South,如果这有帮助的话。

5 个回答

0

你可以通过Django的命令行工具来完成这个操作:

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

记得把[your_app]换成你的应用名称,把[Your_Model]换成你想要清空的模型名称。

要注意,这个操作会删除表里的数据,但不会删除表本身。如果你想删除表的话,就需要执行删除表的命令。

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 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. 我把那个麻烦的模型/表格注释掉了,在我这个例子中是 Front
  3. 我运行了 python manage.py makemigrations,这时候就删除了那个麻烦的表格/模型。
  4. 我把我的模型取消注释,然后再次运行 python manage.py makemigrations,这就重新创建了表格/模型,最后
  5. 我用 python manage.py migrate 迁移了我的更改,所有问题都解决了!

注意:要小心使用上面的步骤,因为这会删除所有与这个表格/模型有关的引用/外键,默认情况下是 on_delete=models.CASCADE

2

在管理界面中,你可以找到那个模型的列表页面,然后可以选择所有模型,并在表格顶部使用 删除选中的 ... 操作。

记住,无论你用什么方式删除数据,外键默认是 ON DELETE CASCADE,这意味着任何与你想删除的模型有外键关联的模型也会被删除。管理界面会给你一个完整的将要被删除的模型的概览。

6

你可以直接使用原始SQL

 cursor.execute(“DROP TABLE UGC”)

或者你也可以直接在Django的命令行中使用ORM:

UGCModel.objects.all().delete()

这样做会删除数据(但不会删除表),所以你要小心哦 :)

还有一种方法(为了完整性和利用South)就是在你的模型声明中把模型注释掉,然后进行迁移,最后再把它放回去(前提是没有其他模型引用它)。

希望这对你有帮助

撰写回答