sqlalchemy / alembic

A database migrations tool for SQLAlchemy.
MIT License
2.81k stars 242 forks source link

support PG INHERITS in autogenerate #404

Open sqlalchemy-bot opened 7 years ago

sqlalchemy-bot commented 7 years ago

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_')
sqlalchemy-bot commented 7 years ago

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.

sqlalchemy-bot commented 7 years ago

Changes by Quentin Leffray:

sqlalchemy-bot commented 7 years ago

Changes by Michael Bayer (@zzzeek):

sqlalchemy-bot commented 7 years ago

Changes by Michael Bayer (@zzzeek):