在维护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 ###
感谢在这方面的任何帮助。
2条答案
按热度按时间vwhgwdsa1#
在
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
自动产生可以选择性地侦测:
...
更改服务器默认值。如果将EnvironmentContext.configure.compare_server_default参数设置为True或自定义可调用函数,则会发生此情况。此功能适用于简单情况,但并不总是生成准确的结果。
...
bvuwiixz2#
只要通过
false()
在default_server
夸格在Column
。参考:https://docs.sqlalchemy.org/en/14/core/sqlelement.html