While maintaining a SQLAlchemy data model and utilizing alembic for version control, the following code change I made resulted in an empty revision:
some_column = Column(Boolean, nullable=False, default=False)
While previously it was:
some_column = Column(Boolean, nullable=False)
So adding a default value produces no changes in alembic, i.e. generates an empty revision. I tried other values offered by SQLAlchemy like false()
and expression.false()
instead of False
, but the result is the same (empty alembic revision). Also tried server_default
instead of default
. The database in question is PostgreSQL.
By empty revision, of course I mean that alembic doesn't recognize any change being made in 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 ###
Appreciate any help in this regard.
To do this automatically you have to turn on a setting to detect server default changes.
In your env.py
, for the context.configure
calls (online and offline migrations, so in 2 places), add a compare_server_default=True
kwarg.
It is probably safer to just put in the alter_column
yourself as well as definitely use server_default
because default
is just for python-side setting of the default(which is ok but sounds like not what you want).
Autogenerate can optionally detect:
...
Change of server default. This will occur if you set the EnvironmentContext.configure.compare_server_default parameter to True, or to a custom callable function. This feature works well for simple cases but cannot always produce accurate results.
...