【问题标题】:How to use existing postgres enum in alembic migration?如何在 alembic 迁移中使用现有的 postgres 枚举?
【发布时间】:2021-04-28 23:32:45
【问题描述】:

我有一个使用 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”已经存在

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

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

【问题讨论】:

    标签: python sqlalchemy alembic


    【解决方案1】:

    SQLAlchemy 的内置Enum 类型不支持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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 2020-03-28
      • 2019-05-02
      • 2019-12-08
      • 2016-09-06
      • 2021-08-03
      • 2018-06-29
      相关资源
      最近更新 更多