gpt4 book ai didi

python - Alembic 无法识别 False 默认值

转载 作者:行者123 更新时间:2023-12-04 01:23:46 24 4
gpt4 key购买 nike

在维护 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 ###


感谢这方面的任何帮助。

最佳答案

要自动执行此操作,您必须打开设置以检测服务器默认更改。
在您的 env.py ,为 context.configure调用(在线和离线迁移,所以在 2 个地方),添加一个 compare_server_default=True夸格。
输入 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 can optionally detect:

...

Change of server default. This will occur if you set theEnvironmentContext.configure.compare_server_default parameter to True,or to a custom callable function. This feature works well for simplecases but cannot always produce accurate results.

...

关于python - Alembic 无法识别 False 默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62212263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com