def destory_everything(echo=True): """ Using metadata.reflect() to get all constraints and tables. metadata.drop_all() as it handles cyclical constraints between tables. Ref. http://www.sqlalchemy.org/trac/wiki/UsageRecipes/DropEverything """ engine = session.get_engine(echo=echo) conn = engine.connect() # the transaction only applies if the DB supports # transactional DDL, i.e. Postgresql, MS SQL Server trans = conn.begin() inspector = reflection.Inspector.from_engine(engine) # gather all data first before dropping anything. # some DBs lock after things have been dropped in # a transaction. metadata = MetaData() 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(ForeignKeyConstraint((), (), name=fk['name'])) t = Table(table_name, metadata, *fks) tbs.append(t) all_fks.extend(fks) for fkc in all_fks: try: print str(DropConstraint(fkc)) + ';' conn.execute(DropConstraint(fkc)) except: print traceback.format_exc() for table in tbs: try: print str(DropTable(table)).strip() + ';' conn.execute(DropTable(table)) except: print traceback.format_exc() trans.commit()
def destroy_database(echo=True): """Destroy the database""" engine = session.get_engine(echo=echo) models.unregister_models(engine)
def build_database(echo=True, tests=False): """Build the database. """ engine = session.get_engine(echo=echo) models.register_models(engine)