"""Add user profile fields (name, avatar, updated_at) Revision ID: 026 Revises: 025 Create Date: 2026-07-05 补录用户资料字段。生产数据库已手动添加过这些字段, 因此 upgrade 做幂等检查,避免在已有字段的库上执行报错。 """ import sqlalchemy as sa from alembic import context, op revision = "026" down_revision = "025" branch_labels = None depends_on = None def _column_exists(table: str, column: str) -> bool: if context.is_offline_mode(): return False conn = op.get_bind() result = conn.execute( sa.text( "SELECT COUNT(*) FROM information_schema.columns " "WHERE table_name = :table AND column_name = :column" ), {"table": table, "column": column}, ) return result.scalar() > 0 def upgrade() -> None: if not _column_exists("users", "name"): op.add_column("users", sa.Column("name", sa.String(100), nullable=True)) if not _column_exists("users", "avatar"): op.add_column("users", sa.Column("avatar", sa.String(500), nullable=True)) if not _column_exists("users", "updated_at"): op.add_column( "users", sa.Column( "updated_at", sa.DateTime(), nullable=True, server_default=sa.func.now(), ), ) def downgrade() -> None: op.drop_column("users", "updated_at") op.drop_column("users", "avatar") op.drop_column("users", "name")