59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
|
|
"""Add UUID to file_attachments
|
||
|
|
|
||
|
|
Revision ID: e9515e29ef8b
|
||
|
|
Revises: c5b574480b80
|
||
|
|
Create Date: 2026-03-20 21:58:22.006727
|
||
|
|
|
||
|
|
"""
|
||
|
|
from alembic import op
|
||
|
|
import sqlalchemy as sa
|
||
|
|
import uuid
|
||
|
|
|
||
|
|
|
||
|
|
# revision identifiers, used by Alembic.
|
||
|
|
revision = 'e9515e29ef8b'
|
||
|
|
down_revision = 'c5b574480b80'
|
||
|
|
branch_labels = None
|
||
|
|
depends_on = None
|
||
|
|
|
||
|
|
|
||
|
|
def upgrade():
|
||
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
||
|
|
# Step 1: Add UUID column as nullable
|
||
|
|
op.add_column('file_attachments', sa.Column('uuid', sa.String(length=36), nullable=True))
|
||
|
|
|
||
|
|
# Step 2: Populate UUID for existing rows
|
||
|
|
from sqlalchemy.sql import table, column, select, update
|
||
|
|
|
||
|
|
file_attachments_table = table('file_attachments',
|
||
|
|
column('id', sa.Integer),
|
||
|
|
column('uuid', sa.String(36))
|
||
|
|
)
|
||
|
|
|
||
|
|
connection = op.get_bind()
|
||
|
|
|
||
|
|
# Get all existing file attachments
|
||
|
|
result = connection.execute(select(file_attachments_table.c.id))
|
||
|
|
for row in result:
|
||
|
|
new_uuid = str(uuid.uuid4())
|
||
|
|
connection.execute(
|
||
|
|
file_attachments_table.update()
|
||
|
|
.where(file_attachments_table.c.id == row[0])
|
||
|
|
.values(uuid=new_uuid)
|
||
|
|
)
|
||
|
|
|
||
|
|
# Step 3: Make UUID not null and add constraints
|
||
|
|
op.alter_column('file_attachments', 'uuid', nullable=False)
|
||
|
|
op.create_index('ix_file_attachments_uuid', 'file_attachments', ['uuid'], unique=False)
|
||
|
|
op.create_unique_constraint('uq_file_attachments_uuid', 'file_attachments', ['uuid'])
|
||
|
|
|
||
|
|
# ### end Alembic commands ###
|
||
|
|
|
||
|
|
|
||
|
|
def downgrade():
|
||
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
||
|
|
op.drop_constraint('uq_file_attachments_uuid', 'file_attachments', type_='unique')
|
||
|
|
op.drop_index('ix_file_attachments_uuid', table_name='file_attachments')
|
||
|
|
op.drop_column('file_attachments', 'uuid')
|
||
|
|
|
||
|
|
# ### end Alembic commands ###
|