"""${message}

Revision ID: ${up_revision}
Revises: ${down_revision | comma,n}
Create Date: ${create_date}

"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy import text
from sqlalchemy.engine import reflection
import logging
${imports if imports else ""}

# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger('alembic.migration')

# revision identifiers, used by Alembic.
revision = ${repr(up_revision)}
down_revision = ${repr(down_revision)}
branch_labels = ${repr(branch_labels)}
depends_on = ${repr(depends_on)}


def safe_execute(func, *args, **kwargs):
    """
    安全执行函数，捕获异常并记录日志
    
    Args:
        func: 要执行的函数
        *args: 位置参数
        **kwargs: 关键字参数
        
    Returns:
        执行结果或 None（如果发生异常）
    """
    try:
        return func(*args, **kwargs)
    except Exception as e:
        logger.error(f"执行 {func.__name__} 时发生错误: {e}")
        return None


def column_exists(table_name, column_name):
    """
    检查列是否存在
    
    Args:
        table_name: 表名
        column_name: 列名
        
    Returns:
        bool: 列是否存在
    """
    conn = op.get_bind()
    inspector = reflection.Inspector.from_engine(conn)
    columns = inspector.get_columns(table_name)
    return column_name in [column['name'] for column in columns]


def index_exists(table_name, index_name):
    """
    检查索引是否存在
    
    Args:
        table_name: 表名
        index_name: 索引名
        
    Returns:
        bool: 索引是否存在
    """
    conn = op.get_bind()
    inspector = reflection.Inspector.from_engine(conn)
    indexes = inspector.get_indexes(table_name)
    return index_name in [index['name'] for index in indexes]


def table_exists(table_name):
    """
    检查表是否存在
    
    Args:
        table_name: 表名
        
    Returns:
        bool: 表是否存在
    """
    conn = op.get_bind()
    inspector = reflection.Inspector.from_engine(conn)
    return table_name in inspector.get_table_names()


def upgrade():
    ${upgrades if upgrades else "pass"}


def downgrade():
    ${downgrades if downgrades else "pass"} 