如何在 alembic 迁移中使用现有的 postgres 枚举?

How to use existing postgres enum in alembic migration?

我有一个使用 alembic 的新迁移。我的数据库有一个枚举名称 myenum.

这是迁移脚本:

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

但是当我迁移脚本时,它除了:

DuplicateObject: "myenum" already exists

我需要知道如何在迁移中使用现有枚举。

我已尝试 create_type=False 如答案 here 所示。但这也无济于事。

内置的 Enum 类型的 SQLAlchemy 不支持 create_type。您可以使用支持 create_type=False.

的 postgres 方言中的 ENUM 类型
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)
        # ...
    )

有关 create_type 的更多信息,请参阅 docs