仅刷新一个应用而非整个项目

25 投票
4 回答
14859 浏览
提问于 2025-04-16 16:18

python manage.py flush 这个命令会清空整个项目中的数据。我想要能够只清空某个特定应用的数据,比如用 python manage.py flush agivenapp 这样的命令。我该怎么做呢?

4 个回答

7

对于后来的Django版本,可以在Django的命令行工具中尝试以下内容:

from django.apps import apps
my_app = apps.get_app_config('my_app_name')
my_models = my_app.get_models()
for model in my_models:
    model.objects.all().delete()

关于 apps 模块的更多信息可以在 这里 找到。 当然,你也可以自己把这个转换成一个管理命令,具体可以参考管理 基础知识

13

你可以使用 migrate 命令来完成这个操作,这个命令需要两个参数:

这个命令的作用是更新数据库的结构。它可以管理那些有迁移记录的应用和没有迁移记录的应用。

参数说明:

app_label
这是你要同步状态的应用的标签。
migration_name
数据库的状态会被更新到这个迁移之后的状态。如果你使用“zero”这个名字,就会撤销所有的迁移。

所以,如果你先运行 migrate zero,然后再运行 migrate,只会清除指定应用的数据。

$ python manage.py migrate ${APPNAME} zero
$ python manage.py migrate ${APPNAME}    
17

sqlclear 管理命令可以很有用...

Usage: ./manage.py sqlclear [options] <appname appname ...>

Prints the DROP TABLE SQL statements for the given app name(s).

对于 PostgreSQL,你可以这样做:

./manage.py sqlclear myapp | psql dbname

更新 对于有迁移的应用和 Django 1.7 以上版本:

python manage.py migrate <app> zero

撰写回答