如何在alembic中使用alter_column?

问题描述 投票:0回答:3

我正在用 alembic 编写迁移,但对我来说似乎不可能将 server_defaults 的值从有的值更改为无。

我的代码:

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

如果我在迁移后检查,默认值仍然是 NOW()

python sqlalchemy alembic
3个回答
87
投票

要从 Alembic 0.9.5 开始重命名列,我必须将迁移更改为如下所示:

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

23
投票

这不是

op.alter_column()
的工作原理。向其传递有关要更改的内容的参数,而不是新的
sa.Column
实例。

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

0
投票
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的这个解决方案对我来说就像一个魅力。

用此更新升级函数,并在向下函数中添加逆函数,new_column_name -> old_column_name。对于我的代码,我也注释掉了 alembic 生成的代码。

© www.soinside.com 2019 - 2024. All rights reserved.