Beispiel #1
0
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()
Beispiel #2
0
def destroy_database(echo=True):
    """Destroy the database"""
    engine = session.get_engine(echo=echo)
    models.unregister_models(engine)
Beispiel #3
0
def build_database(echo=True, tests=False):
    """Build the database. """
    engine = session.get_engine(echo=echo)
    models.register_models(engine)