Combination of 0.8 compat patches. All are currently after 0.7.2 tag at: https://github.com/stackforge/sqlalchemy-migrate Also included is this adjustment: https://review.openstack.org/#/c/47847/ diff -Naur sqlalchemy-migrate-0.7.2.orig/migrate/tests/changeset/test_changeset.py sqlalchemy-migrate-0.7.2/migrate/tests/changeset/test_changeset.py --- sqlalchemy-migrate-0.7.2.orig/migrate/tests/changeset/test_changeset.py 2011-10-28 15:11:43.000000000 +0000 +++ sqlalchemy-migrate-0.7.2/migrate/tests/changeset/test_changeset.py 2013-03-11 11:45:29.066638792 +0000 @@ -560,7 +560,7 @@ self.table.drop() try: self.table.create() - except sqlalchemy.exceptions.SQLError, e: + except sqlalchemy.exc.SQLError, e: # SQLite: database schema has changed if not self.url.startswith('sqlite://'): raise @@ -569,7 +569,7 @@ if self.table.exists(): try: self.table.drop(self.engine) - except sqlalchemy.exceptions.SQLError,e: + except sqlalchemy.exc.SQLError,e: # SQLite: database schema has changed if not self.url.startswith('sqlite://'): raise diff -Naur sqlalchemy-migrate-0.7.2.orig/migrate/versioning/schema.py sqlalchemy-migrate-0.7.2/migrate/versioning/schema.py --- sqlalchemy-migrate-0.7.2.orig/migrate/versioning/schema.py 2011-10-28 15:11:43.000000000 +0000 +++ sqlalchemy-migrate-0.7.2/migrate/versioning/schema.py 2013-03-11 11:44:45.769557705 +0000 @@ -7,7 +7,7 @@ from sqlalchemy import (Table, Column, MetaData, String, Text, Integer, create_engine) from sqlalchemy.sql import and_ -from sqlalchemy import exceptions as sa_exceptions +from sqlalchemy import exc as sa_exceptions from sqlalchemy.sql import bindparam from migrate import exceptions diff -Naur sqlalchemy-migrate-0.7.2.orig/migrate/changeset/ansisql.py sqlalchemy-migrate-0.7.2/migrate/changeset/ansisql.py --- sqlalchemy-migrate-0.7.2.orig/migrate/changeset/ansisql.py 2011-10-28 15:11:43.000000000 +0000 +++ sqlalchemy-migrate-0.7.2/migrate/changeset/ansisql.py 2013-09-23 11:34:18.656844658 +0000 @@ -171,8 +171,8 @@ self.preparer.quote( self._validate_identifier( index.new_name, True), index.quote))) - else: - # SA >= 0.6.5 + elif hasattr(self, '_index_identifier'): + # SA >= 0.6.5, < 0.8 self.append("ALTER INDEX %s RENAME TO %s" % ( self.preparer.quote( self._index_identifier( @@ -180,6 +180,22 @@ self.preparer.quote( self._index_identifier( index.new_name), index.quote))) + else: + # SA >= 0.8 + class NewName(object): + """Map obj.name -> obj.new_name""" + def __init__(self, index): + self.name = index.new_name + self._obj = index + + def __getattr__(self, attr): + if attr == 'name': + return getattr(self, attr) + return getattr(self._obj, attr) + + self.append("ALTER INDEX %s RENAME TO %s" % ( + self._prepared_index_name(index), + self._prepared_index_name(NewName(index)))) self.execute() def visit_column(self, delta): diff -Naur sqlalchemy-migrate-0.7.2.orig_reflect/migrate/tests/fixture/database.py sqlalchemy-migrate-0.7.2.reflect/migrate/tests/fixture/database.py --- sqlalchemy-migrate-0.7.2.orig_reflect/migrate/tests/fixture/database.py 2011-10-28 15:11:43.000000000 +0000 +++ sqlalchemy-migrate-0.7.2.reflect/migrate/tests/fixture/database.py 2013-09-23 12:20:26.022608233 +0000 @@ -128,7 +128,8 @@ def _setup(self, url): self._connect(url) # make sure there are no tables lying around - meta = MetaData(self.engine, reflect=True) + meta = MetaData(self.engine) + meta.reflect() meta.drop_all() def _teardown(self): diff -Naur sqlalchemy-migrate-0.7.2.orig_reflect/migrate/tests/versioning/test_genmodel.py sqlalchemy-migrate-0.7.2.reflect/migrate/tests/versioning/test_genmodel.py --- sqlalchemy-migrate-0.7.2.orig_reflect/migrate/tests/versioning/test_genmodel.py 2011-10-28 15:11:43.000000000 +0000 +++ sqlalchemy-migrate-0.7.2.reflect/migrate/tests/versioning/test_genmodel.py 2013-09-23 12:21:42.254900961 +0000 @@ -18,9 +18,11 @@ def _setup(self, url): super(TestSchemaDiff, self)._setup(url) - self.meta = MetaData(self.engine, reflect=True) + self.meta = MetaData(self.engine) + self.meta.reflect() self.meta.drop_all() # in case junk tables are lying around in the test database - self.meta = MetaData(self.engine, reflect=True) # needed if we just deleted some tables + self.meta = MetaData(self.engine) # needed if we just deleted some tables + self.meta.reflect() self.table = Table(self.table_name, self.meta, Column('id',Integer(), primary_key=True), Column('name', UnicodeText()), @@ -29,7 +31,8 @@ def _teardown(self): if self.table.exists(): - self.meta = MetaData(self.engine, reflect=True) + self.meta = MetaData(self.engine) + self.meta.reflect() self.meta.drop_all() super(TestSchemaDiff, self)._teardown() diff -Naur sqlalchemy-migrate-0.7.2.orig_reflect/migrate/tests/versioning/test_shell.py sqlalchemy-migrate-0.7.2.reflect/migrate/tests/versioning/test_shell.py --- sqlalchemy-migrate-0.7.2.orig_reflect/migrate/tests/versioning/test_shell.py 2013-09-11 23:46:46.288846726 +0000 +++ sqlalchemy-migrate-0.7.2.reflect/migrate/tests/versioning/test_shell.py 2013-09-23 12:20:41.229666598 +0000 @@ -461,7 +461,7 @@ old_model_module = 'migrate.tests.fixture.models:meta_old_rundiffs' # Create empty repository. - self.meta = MetaData(self.engine, reflect=True) + self.meta = MetaData(self.engine) self.meta.reflect() self.meta.drop_all() # in case junk tables are lying around in the test database diff -Naur sqlalchemy-migrate-0.7.2.orig_reflect/migrate/versioning/schemadiff.py sqlalchemy-migrate-0.7.2.reflect/migrate/versioning/schemadiff.py --- sqlalchemy-migrate-0.7.2.orig_reflect/migrate/versioning/schemadiff.py 2011-10-28 15:11:43.000000000 +0000 +++ sqlalchemy-migrate-0.7.2.reflect/migrate/versioning/schemadiff.py 2013-09-23 12:20:06.302532576 +0000 @@ -16,7 +16,8 @@ :return: object which will evaluate to :keyword:`True` if there \ are differences else :keyword:`False`. """ - db_metadata = sqlalchemy.MetaData(engine, reflect=True) + db_metadata = sqlalchemy.MetaData(engine) + db_metadata.reflect() # sqlite will include a dynamically generated 'sqlite_sequence' table if # there are autoincrement sequences in the database; this should not be