只刷一个应用程序而不是整个项目

时间:2011-04-23 21:06:56

标签: python django django-models

python manage.py flush从整个项目中删除数据。我希望能够python manage.py flush agivenapp我该怎么做?

4 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:10)

您可以使用带有两个位置参数的migrate命令来执行此操作:

  

更新数据库架构。管理具有迁移的应用程序和没有迁移的应用程序。

     

位置参数:

     

<强> app_label
  用于同步状态的应用程序的应用程序标签   的 migration_name
  之后数据库状态将被带到该状态   移民。使用名称“零”取消应用所有迁移。

因此,运行迁移零并随后迁移将仅清除给定应用程序的数据。

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

答案 2 :(得分:2)

对于Django的更高版本,请尝试使用Django shell:

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模块的更多内容可以找到here。 当然,您可以使用管理infrastructure将其转换为管理命令。

答案 3 :(得分:0)

我还需要清空某些应用程序。我想出了这个解决方案。这适用于mysql。可能需要为其他数据库更改代码。

主要的想法是不要做整个'同花顺'。相反,我得到的只是我想要的东西,来自'sqlflush'的grep。您也可以将所有内容放在一行中。为了便于阅读,我把它分开了。

BEGIN="BEGIN; SET FOREIGN_KEY_CHECKS = 0;"
TRUNCATE=`./manage.py sqlflush |egrep " \\\`app1_| \\\`app2_"`
END="SET FOREIGN_KEY_CHECKS = 1; COMMIT;"

echo $BEGIN $TRUNCATE $END | ./manage.py dbshell