python manage.py flush
удаляет данные из всего проекта. Я хотел бы иметь возможность сделать python manage.py flush agivenapp
Как я могу это сделать?
Выполнить только приложение, а не весь проект
Ответ 1
Команда управления 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
UPDATE для приложений с миграциями и Django 1.7 +:
python manage.py migrate <app> zero
Ответ 2
Вы можете сделать это с помощью команды migrate
, которая принимает два позиционных аргумента:
Обновляет схему базы данных. Управляет обоими приложениями с миграциями и без него.
позиционные аргументы:
app_label
Метка приложения приложения для синхронизации состояния.
migration_name
Состояние базы данных будет доставлено в состояние после этого миграция. Используйте "ноль" для отмены всех миграций.
Таким образом, при запуске нулевого значения переноса с последующим переносом будут удалены только данные для данного приложения.
$ python manage.py migrate ${APPNAME} zero
$ python manage.py migrate ${APPNAME}
Ответ 3
Для более поздних версий 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
можно найти здесь.
Конечно, вы можете преобразовать это в команду управления самостоятельно, используя инфраструктуру управления .
Ответ 4
Мне также нужно было что-то, чтобы пустить только определенные приложения. Я придумал это решение. Это работало для mysql. Возможно, код необходимо изменить для других баз данных.
Основная идея - не делать весь "флеш". Вместо этого я получаю только то, что хочу, с grep из "sqlflush". Вы также можете поместить все в одну строку. Для удобства чтения я разделил его.
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