2

I have a new migration using alembic. My database has a enum name myenum.

This is the migration script:

def upgrade():
    op.create_table(
        "test_table",
        # ...
        sa.Column("enum_col", sa.Enum("A", "B", "C", name="myenum"), server_default="A", nullable=False)
        # ...
    )

But when I migrate the script, it excepts:

DuplicateObject: "myenum" already exists

I need to know how to use the existing enum in migration.

I've tried create_type=False as shown in the answer here. But It doesn't help either.

PaxPrz
  • 1,778
  • 1
  • 13
  • 29

1 Answers1

1

The built-in Enum type of SQLAlchemy doesn't support create_type. You can use the ENUM type from the postgres dialect which support create_type=False.

from sqlalchemy.dialects import postgresql as pg
def upgrade():
    op.create_table(
        "test_table",
        # ...
        sa.Column("enum_col", 
                  pg.ENUM("A", "B", "C", 
                  name="myenum", create_type=False), 
                  server_default="A", nullable=False)
        # ...
    )

See the docs for some additional information about create_type.

rfkortekaas
  • 6,049
  • 2
  • 27
  • 34