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.
Just pass false() in server_default kwarg in Column.
ref: https://docs.sqlalchemy.org/en/14/core/sqlelement.html
from sqlalchemy.sql import false
some_column = Column(Boolean, server_default=false(), nullable=False)
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).
Quoted from 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 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.
...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With