How to drop all tables from the database with manage.py CLI in Django?

前端 未结 18 1682
余生分开走
余生分开走 2020-11-29 16:54

How can I drop all tables from a database using manage.py and command line? Is there any way to do that executing manage.py with appropriate parameters so I can execute it f

18条回答
  •  眼角桃花
    2020-11-29 17:56

    Here's a south migration version of @peter-g's answer. I often fiddle with raw sql, so this comes in handy as 0001_initial.py for any befuddled apps. It will only work on DBs that support SHOW TABLES (like mysql). Substitute something like SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'; if you use PostgreSQL. Also, I often do this exact same thing for both the forwards and backwards migrations.

    from south.db import db
    from south.v2 import SchemaMigration
    from django.db.utils import DatabaseError
    from os import path
    from logging import getLogger
    logger = getLogger(__name__)
    
    
    class Migration(SchemaMigration):
    
        def forwards(self, orm):
    
            app_name = path.basename(path.split(path.split(path.abspath(__file__))[0])[0])
            table_tuples = db.execute(r"SHOW TABLES;")
    
            for tt in table_tuples:
                table = tt[0]
                if not table.startswith(app_name + '_'):
                    continue
                try:
                    logger.warn('Deleting db table %s ...' % table)
                    db.delete_table(table)
                except DatabaseError:
                    from traceback import format_exc
                    logger.error("Error running %s: \n %s" % (repr(self.forwards), format_exc()))
    

    Coworker/cocoders would kill me if they knew I did this, though.

提交回复
热议问题