Alembic:如何在迁移脚本中添加一个新的枚举类型而不诉诸于`Alembic.op.execute`

2024-10-03 00:16:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在Alembic上创建一个新的迁移,它将一个新枚举类型的新列添加到现有表中。但我得到了一个错误,我以为Alembic会自动处理

我使用的是postgres9.6.6、alembic0.9.10和SQLAlchemy 1.2.9

我的剧本里有:

def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.add_column(
        "task",
        sa.Column(
            "task_type",
            sa.Enum(
                "train", "predict", "refresh", name="tasktypeenum"
            ),
            nullable=True,
        ),
    )
    # ### end Alembic commands ###

下面是我尝试应用此迁移脚本时堆栈跟踪的结尾(其余部分仅来自SQLAlchemy):

sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) type "tasktypeenum" does not exist
LINE 1: ...task ADD COLUMN task_type tasktypeen...
                                     ^
[SQL: 'ALTER TABLE task ADD COLUMN task_type tasktypeenum'] (Background on this error at: http://sqlalche.me/e/f405)

但是,我们在旧的迁移文件中也有类似的语句,可以很好地工作。我看到的唯一区别是它们嵌套在op.create_table

我知道我可以通过做op.execute("CREATE TYPE ...")来解决这个问题,但是我想知道是否有一个使用Alembic特性的解决方案

谢谢你的指导


Tags: add类型tasksqlalchemydeftype错误sa