如何在alembic中使用alter_column?

63 投票
3 回答
55524 浏览
提问于 2025-04-17 23:35

我正在用alembic写一个迁移,但我觉得把server_defaults的值从某个东西改成空值几乎是不可能的。

我的代码:

op.alter_column("foo", sa.Column("bar", sa.DateTime(timezone=False), server_default=None, nullable=True))

如果我在迁移后检查,发现默认值还是NOW()

3 个回答

2
with op.batch_alter_table('my_table', schema=None) as batch_op: batch_op.alter_column('old_col_name', new_column_name='new_col_name')

这个来自 Charles 的解决方案对我来说非常有效。

把升级函数更新成这个样子,然后在降级函数里加上相反的操作,也就是把新列名改回旧列名。对于我的代码,我也把 alembic 生成的代码注释掉了。

25

这不是op.alter_column()的正确用法。你需要传递一些参数来说明你想要改变什么,而不是传一个新的sa.Column实例。

op.alter_column('my_table', 'my_column', server_default=None)
89

为了在Alembic 0.9.5中重命名一个列,我需要修改我的迁移文件,内容如下:

op.alter_column('my_table', 'old_col_name', nullable=False, new_column_name='new_col_name')

撰写回答