"""add sources table + source_id on videos/series/collection_sources Revision ID: f1b7d4a9c310 Revises: e7a1f3c58d02 Create Date: 2026-10-24 10:00:00.000000 """ from alembic import op import sqlalchemy as sa from sqlalchemy.dialects import mysql revision = 'f1b7d4a9c310' down_revision = 'e7a1f3c58d02' branch_labels = None depends_on = None def upgrade() -> None: # 内容来源表(片商) op.create_table( 'sources', sa.Column('id', mysql.INTEGER(unsigned=True), autoincrement=True, nullable=False), sa.Column('name', sa.String(length=50), nullable=False, comment='来源名称,如 麻豆'), sa.Column('code', sa.String(length=50), nullable=False, server_default='', comment='英文/拼音标识'), sa.Column('sort', sa.Integer(), nullable=False, server_default='0', comment='越小越靠前'), sa.Column('status', mysql.TINYINT(), nullable=False, server_default='1', comment='1启用 0停用'), sa.Column('created_at', sa.DateTime(), nullable=False, server_default=sa.func.current_timestamp()), sa.PrimaryKeyConstraint('id'), sa.UniqueConstraint('name'), ) # 存量数据全部归为「麻豆」 op.execute("INSERT INTO sources (name, code, sort, status) VALUES ('麻豆', 'madou', 1, 1)") for table in ('videos', 'series', 'collection_sources'): op.add_column(table, sa.Column('source_id', mysql.INTEGER(unsigned=True), nullable=False, server_default='0', comment='内容来源 id')) op.execute(f"UPDATE {table} SET source_id = (SELECT id FROM sources WHERE code = 'madou')") op.create_index('idx_video_source', 'videos', ['source_id', 'status']) op.create_index('idx_series_source', 'series', ['source_id', 'status']) def downgrade() -> None: op.drop_index('idx_series_source', table_name='series') op.drop_index('idx_video_source', table_name='videos') op.drop_column('collection_sources', 'source_id') op.drop_column('series', 'source_id') op.drop_column('videos', 'source_id') op.drop_table('sources')