如何在alembic中使用alter_column?

tap*_*123 15 python sqlalchemy alembic

我正在用alembic编写一个迁移,但似乎不可能将server_defaults的值从某个东西改为零.

我的代码:

op.alter_column("foo", sa.Column("bar", sa.DateTime(timezone=False), server_default=None, nullable=True))
Run Code Online (Sandbox Code Playgroud)

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

小智 18

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

op.alter_column('my_table', 'old_col_name', nullable=False, new_column_name='new_col_name')
Run Code Online (Sandbox Code Playgroud)

  • 如果你想支持sqlite,你需要批量执行此操作:`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')` (4认同)
  • 请注意,您还必须指定“existing_type”才能运行“alter_column”命令 (2认同)
  • 似乎“ existing_type”参数仅在某些情况下是必需的,例如某些MySQL操作。[文档](https://alembic.sqlalchemy.org/en/latest/ops.html?highlight=insert#alembic.operations.Operations.alter_column.params.existing_type)还有更多。 (2认同)

dav*_*ism 8

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

op.alter_column('my_table', 'my_column', server_default=None)
Run Code Online (Sandbox Code Playgroud)