Flush just an app not the whole project

前端 未结 4 459
感动是毒
感动是毒 2021-02-04 01:08

python manage.py flush removes data from the entire project. I would like to be able to do python manage.py flush agivenapp How can I do this?

相关标签:
4条回答
  • 2021-02-04 01:47

    For later versions of Django try in the 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()
    

    More on the apps module can be found here. Of course, you could convert this to a management command yourself using the management infrastructure.

    0 讨论(0)
  • 2021-02-04 01:47

    I also needed something to empty only certain apps. I came up with this solution. This worked for mysql. It could be that the code needs to be changed for other databases.

    The main idea is not to do the whole 'flush'. Instead I get only what I want, with a grep from 'sqlflush'. You can also put everything in one line. For readability I split it up.

    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
    
    0 讨论(0)
  • 2021-02-04 01:58

    You can do this with the migrate command which takes two positional arguments:

    Updates database schema. Manages both apps with migrations and those without.

    positional arguments:

    app_label
    App label of an application to synchronize the state.
    migration_name
    Database state will be brought to the state after that migration. Use the name "zero" to unapply all migrations.

    So running a migrate zero followed by a migrate will clear only the data for the given app.

    $ python manage.py migrate ${APPNAME} zero
    $ python manage.py migrate ${APPNAME}    
    
    0 讨论(0)
  • 2021-02-04 02:01

    sqlclear management command can be helpful...

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

    for the postgresql you can do:

    ./manage.py sqlclear myapp | psql dbname
    

    UPDATE for apps with migrations and Django 1.7+:

    python manage.py migrate <app> zero
    
    0 讨论(0)
提交回复
热议问题