Alembic无法识别错误的默认值

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

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

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

以前是:

some_column = Column(Boolean, nullable=False)

因此,添加默认值不会产生任何改变,即生成一个空的修订版。我尝试了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个回答
0
投票

似乎您必须打开一个设置来检查服务器默认设置,可能更安全地自己放入alter_column并绝对使用server_default,因为default仅用于python端的设置默认(可以,但是听起来不是您想要的)。

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

自动生成可以选择检测:

...

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

...

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