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)
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)