"""#1197 - 预览生成:generation_tasks 表新增 is_preview 字段 Revision ID: 053 Revises: 052 Create Date: 2026-08-15 Changes: 1. generation_tasks 表新增 is_preview 字段,标记是否为预览生成任务(低清 480p) 2. 默认 False,与现有正式生成任务兼容 3. 加索引以支持按预览/正式任务筛选 """ import sqlalchemy as sa from alembic import context, op revision = "053_generation_task_is_preview" down_revision = "052_generation_task_bgm_config" branch_labels = None depends_on = None def upgrade() -> None: conn = op.get_bind() if context.get_context().dialect.name == "postgresql": # 检查列是否已存在(幂等) result = conn.execute( sa.text( "SELECT column_name FROM information_schema.columns " "WHERE table_name = 'generation_tasks' AND column_name = 'is_preview'" ) ) if result.scalar() is not None: return op.add_column( "generation_tasks", sa.Column("is_preview", sa.Boolean, nullable=False, server_default=sa.text("false")), ) # 加索引 op.create_index( "ix_generation_tasks_is_preview", "generation_tasks", ["is_preview"], ) def downgrade() -> None: conn = op.get_bind() if context.get_context().dialect.name == "postgresql": result = conn.execute( sa.text( "SELECT column_name FROM information_schema.columns " "WHERE table_name = 'generation_tasks' AND column_name = 'is_preview'" ) ) if result.scalar() is None: return op.drop_index("ix_generation_tasks_is_preview", table_name="generation_tasks") op.drop_column("generation_tasks", "is_preview")