def dropdb(): from nailgun.db import migration conn = engine.connect() trans = conn.begin() meta = MetaData() meta.reflect(bind=engine) inspector = reflection.Inspector.from_engine(engine) tbs = [] all_fks = [] for table_name in inspector.get_table_names(): fks = [] for fk in inspector.get_foreign_keys(table_name): if not fk['name']: continue fks.append( schema.ForeignKeyConstraint((), (), name=fk['name']) ) t = schema.Table( table_name, meta, *fks, extend_existing=True ) tbs.append(t) all_fks.extend(fks) for fkc in all_fks: conn.execute(schema.DropConstraint(fkc)) for table in tbs: conn.execute(schema.DropTable(table)) custom_types = conn.execute( "SELECT n.nspname as schema, t.typname as type " "FROM pg_type t LEFT JOIN pg_catalog.pg_namespace n " "ON n.oid = t.typnamespace " "WHERE (t.typrelid = 0 OR (SELECT c.relkind = 'c' " "FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)) " "AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el " "WHERE el.oid = t.typelem AND el.typarray = t.oid) " "AND n.nspname NOT IN ('pg_catalog', 'information_schema')" ) for tp in custom_types: conn.execute("DROP TYPE {0}".format(tp[1])) trans.commit() migration.drop_migration_meta(engine) conn.close() engine.dispose()
def dropdb(): from nailgun.db import migration from nailgun.db.sqlalchemy.models.base import Base Base.metadata.drop_all(bind=engine) migration.drop_migration_meta(engine)