{"id":922,"hash":"e8c79c36ed1d3c96719ab0a14cc67a681f3d50b385ac224d153199b0c1cca827","pattern":"Alembic: IntegrityError: &quot;column contains null values&quot; when adding non-nullable column","full_message":"I'm adding a column to an existing table. This new column is nullable=False.\n\nop.add_column('mytable', sa.Column('mycolumn', sa.String(), nullable=False))\n\nWhen I run the migration, it complains:\n\nsqlalchemy.exc.IntegrityError: column \"mycolumn\" contains null values","ecosystem":"pypi","package_name":"sqlalchemy","package_version":null,"solution":"It is because your existing data have no value on that new column, i.e. null. Thus causing said error. When adding a non-nullable column, you must decide what value to give to already-existing data\n\nAlright, existing data should just have \"lorem ipsum\" for this new column then. But how do I do it? I can't UPDATE because the column is not there yet.\n\nUse the server_default arg:\n\nop.add_column('mytable', sa.Column(\n    'mycolumn', \n    sa.String(), \n    nullable=False, \n    server_default='lorem ipsum', #  <---  add this\n))\n\nBut, but, I don't want it to have default value\n\nDrop it afterwards using op.alter_column('mytable', 'mycolumn', server_default=None)\n\nE.g. your upgrade() function would be:\n\ndef upgrade():\n    op.add_column('mytable', sa.Column('mycolumn', sa.String(), nullable=False, server_default='lorem ipsum'))\n    op.alter_column('mytable', 'mycolumn', server_default=None)","confidence":0.95,"source":"stackoverflow","source_url":"https://stackoverflow.com/questions/33705697/alembic-integrityerror-column-contains-null-values-when-adding-non-nullable","votes":89,"created_at":"2026-04-19T04:52:00.973397+00:00","updated_at":"2026-04-19T04:52:00.973397+00:00"}