【问题标题】:Alembic doesn't recognize False default valueAlembic 无法识别 False 默认值
【发布时间】:2020-09-24 11:29:09
【问题描述】:

在维护 SQLAlchemy 数据模型并利用 alembic 进行版本控制时,我所做的以下代码更改导致了空修订:

some_column = Column(Boolean, nullable=False, default=False)

以前是:

some_column = Column(Boolean, nullable=False)

因此,添加默认值不会在 alembic 中产生任何变化,即生成一个空修订。我尝试了 SQLAlchemy 提供的其他值,例如 false()expression.false() 而不是 False,但结果是相同的(空 alembic 修订版)。还尝试了server_default 而不是default。有问题的数据库是 PostgreSQL。

通过空修订,当然我的意思是 alembic 无法识别 SQLAlchemy 中所做的任何更改:

def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    pass
    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    pass
    # ### end Alembic commands ###

感谢您在这方面的任何帮助。

【问题讨论】:

    标签: python database postgresql sqlalchemy alembic


    【解决方案1】:

    要自动执行此操作,您必须打开一个设置以检测服务器默认更改。

    在您的env.py 中,对于context.configure 调用(在线和离线迁移,因此在2 处),添加compare_server_default=True kwarg。

    自己输入alter_column 可能更安全,并且绝对使用server_default,因为default 仅用于python 端的默认设置(可以,但听起来不是你想要的) .

    引自https://alembic.sqlalchemy.org/en/latest/autogenerate.html#what-does-autogenerate-detect-and-what-does-it-not-detect

    Autogenerate 可以选择性地检测:

    ...

    更改服务器默认值。如果您设置 EnvironmentContext.configure.compare_server_default 参数为 True, 或自定义可调用函数。此功能适用于简单 例,但不能总是产生准确的结果。

    ...

    【讨论】:

      猜你喜欢
      • 2014-06-08
      • 2023-03-15
      • 2016-08-21
      • 2018-07-14
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      相关资源
      最近更新 更多