Пример #1
0
def getDiffMonkeyPatch(metadata, engine, excludeTables=None):
    """
    Return differences of model against database.

    :return: object which will evaluate to :keyword:`True` if there \
      are differences else :keyword:`False`.
    """
    db_metadata = sa.MetaData(engine, reflect=True)

    # sqlite will include a dynamically generated 'sqlite_sequence' table if
    # there are autoincrement sequences in the database; this should not be
    # compared.
    if engine.dialect.name == 'sqlite':
        if 'sqlite_sequence' in db_metadata.tables:
            db_metadata.remove(db_metadata.tables['sqlite_sequence'])

    return schemadiff.SchemaDiff(metadata, db_metadata,
                      labelA='model',
                      labelB='database',
                      excludeTables=excludeTables)
Пример #2
0
def update_database_from_model():
    """Introspection the model and add missing columns in the database.    
    this function can be ran in setup_model after::
    
        metadata.create_all()
        
    """
    migrate_engine = settings.ENGINE()
    migrate_connection = migrate_engine.connect()

    from sqlalchemy.schema import MetaData
    from migrate.versioning import schemadiff
    from migrate.changeset import create_column
    schema_diff = schemadiff.SchemaDiff(
        metadata, MetaData(migrate_connection, reflect=True))

    for table_name, difference in schema_diff.tables_different.items():
        for column in difference.columns_missing_from_B:
            LOGGER.warn('column %s missing in table %s' % (column, table_name))
            table = metadata.tables[table_name]
            create_column(column, table)