tipos queryset protect integerfield fields example datos python django django-models

python - queryset - Flush solo una aplicación no todo el proyecto



python django documentation (4)

python manage.py flush elimina los datos de todo el proyecto. Me gustaría poder hacer python manage.py flush agivenapp ¿Cómo puedo hacer esto?


El comando de gestión sqlclear puede ser útil ...

Usage: ./manage.py sqlclear [options] <appname appname ...> Prints the DROP TABLE SQL statements for the given app name(s).

Para el postgresql puedes hacer:

./manage.py sqlclear myapp | psql dbname

ACTUALIZACIÓN para aplicaciones con migraciones y Django 1.7+:

python manage.py migrate <app> zero


Para versiones posteriores de Django, inténtalo en el shell de 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()

Más sobre el módulo de apps se puede encontrar here . Por supuesto, puede convertir esto a un comando de administración utilizando la infrastructure administración.


Puede hacer esto con el comando migrate que toma dos argumentos posicionales:

Actualiza el esquema de la base de datos. Gestiona tanto las aplicaciones con migraciones como las que no.

Argumentos posicionales:

app_label
Etiqueta de la aplicación de una aplicación para sincronizar el estado.
nombre_migracion
El estado de la base de datos se llevará al estado después de esa migración. Use el nombre "cero" para desaplicar todas las migraciones.

Por lo tanto, ejecutar una migración cero seguido de una migración borrará solo los datos de la aplicación dada.

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


También necesitaba algo para vaciar solo ciertas aplicaciones. Se me ocurrió esta solución. Esto funcionó para mysql. Puede ser que el código deba cambiarse para otras bases de datos.

La idea principal es no hacer todo el ''color''. En su lugar, solo obtengo lo que quiero, con un grep de ''sqlflush''. También puedes poner todo en una línea. Para facilitar la lectura, lo dividí.

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