migrations/versions/bfcf4182dcb5_.py (29 lines of code) (raw):

"""add slug field to organisations and populate it based on the name field Revision ID: bfcf4182dcb5 Revises: 86c0f6b6a176 Create Date: 2021-03-01 09:52:03.376234 """ from alembic import op import sqlalchemy as sa from slugify import slugify # revision identifiers, used by Alembic. revision = "bfcf4182dcb5" down_revision = "86c0f6b6a176" branch_labels = None depends_on = None def upgrade(): conn = op.get_bind() # ### commands auto generated by Alembic - please adjust! ### op.add_column( "organisations", sa.Column("slug", sa.String(length=255), nullable=True) ) orgs = conn.execute("select name from organisations;") for org in orgs: name = handle_special_chars(org[0]) query = ( f"UPDATE organisations SET slug = '{slugify(name)}' WHERE name = '{name}';" ) op.execute(query) op.alter_column("organisations", "slug", nullable=False) op.create_unique_constraint("organisations_slug_key", "organisations", ["slug"]) # ### end Alembic commands ### def downgrade(): # ### commands auto generated by Alembic - please adjust! ### op.drop_constraint("organisations_slug_key", "organisations", type_="unique") op.drop_column("organisations", "slug") # ### end Alembic commands ### def handle_special_chars(name: str): special_char = name.find("'") if special_char >= 0: name = name[:special_char] + "'" + name[special_char:] return name