alembic
alembic copied to clipboard
support PG INHERITS in autogenerate
Migrated issue, originally created by Quentin Leffray
Running Alembic autogenerate do not detect inherited columns from a parent table, and flag them as "to-be-dropped".
The model is defined as follow:
class Animal(Base):
__tablename__ = 'animal'
id = Column(Integer, primary_key=True)
name = Column(String)
type_ = Column(String)
__mapper_args__ = {
'polymorphic_identity': 'animal',
'polymorphic_on': type_,
'with_polymorphic': '*',
}
class Unicorn(Animal):
__tablename__ = 'unicorn'
__table_args__ = {'postgresql_inherits': 'animal'}
id = Column(Integer, ForeignKey('animal.id'), primary_key=True)
color = Column(String)
__mapper_args__ = {
'polymorphic_identity': 'unicorn',
}
And the migration produced by alembic --autogenerate
:
def upgrade():
### commands auto generated by Alembic - please adjust! ###
op.drop_column('unicorn', 'name')
op.drop_column('unicorn', 'type_')
Michael Bayer (@zzzeek) wrote:
nothing is wrong, this is something that isn't supported out of the box. At the very least would rely upon https://bitbucket.org/zzzeek/sqlalchemy/issues/1803/reflect-postgresql-inherits-relationships. For autogenerate you need to write an include_object routine to ignore these columns appropriately. I'd also accept a recipe section that includes this workaround for now.
Changes by Quentin Leffray:
- edited description
Changes by Michael Bayer (@zzzeek):
- changed title from "Autogenerate detection of inherited columns and po" to "support PG INHERITS in autogenerate"