gpt4 book ai didi

python - Alembic:如何在不求助于 `alembic.op.execute` 的情况下在迁移脚本中添加新的枚举类型

转载 作者:行者123 更新时间:2023-12-04 04:21:28 34 4
gpt4 key购买 nike

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

我使用的是 Postgres 9.6.6、Alembic 0.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 功能的解决方案。

感谢您的指导!

最佳答案

你可以这样做:

task_type_enum = sa.Enum("train", "predict", "refresh", name="tasktypeenum")

def upgrade():
task_type_enum.create(op.get_bind())
op.add_column("task", sa.Column("task_type", task_type_enum, nullable=True))

def downgrade():
op.drop_column("task", "task_type")
task_type_enum.drop(op.get_bind())

关于python - Alembic:如何在不求助于 `alembic.op.execute` 的情况下在迁移脚本中添加新的枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59166742/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com