python manage.py flush
从整个项目中删除数据。我希望能够python manage.py flush agivenapp
我该怎么做?
答案 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