VWED_server/migrations/versions/002_create_extended_properties_table.py
2025-07-14 10:29:37 +08:00

98 lines
4.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
创建扩展属性表
Revision ID: 002
Revises: 001
Create Date: 2024-12-20 10:00:00.000000
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects.mysql import VARCHAR, TEXT, DATETIME, ENUM
# revision identifiers, used by Alembic.
revision = '002'
down_revision = '001'
branch_labels = None
depends_on = None
def upgrade():
"""创建扩展属性表"""
# 创建扩展属性表
op.create_table(
'extended_properties',
sa.Column('id', sa.Integer, primary_key=True, autoincrement=True, comment='主键ID'),
sa.Column('created_at', DATETIME(fsp=6), nullable=False, server_default=sa.text('CURRENT_TIMESTAMP(6)'), comment='创建时间'),
sa.Column('updated_at', DATETIME(fsp=6), nullable=False, server_default=sa.text('CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)'), comment='更新时间'),
sa.Column('is_deleted', sa.Boolean, nullable=False, default=False, comment='是否删除(软删除标记)'),
# 基本信息
sa.Column('property_key', VARCHAR(200), nullable=False, comment='属性键(与属性名称相同)'),
sa.Column('property_name', VARCHAR(200), nullable=False, comment='属性名称(唯一标识)'),
sa.Column('property_type', ENUM('string', 'integer', 'float', 'boolean', 'date', 'datetime', 'text', 'select', 'multiselect'), nullable=False, comment='属性类型'),
# 属性设置
sa.Column('is_required', sa.Boolean, nullable=False, default=False, comment='是否必填'),
sa.Column('is_enabled', sa.Boolean, nullable=False, default=True, comment='是否启用'),
# 描述信息
sa.Column('description', TEXT, comment='属性描述'),
sa.Column('placeholder', VARCHAR(500), comment='输入提示'),
# 默认值和选项
sa.Column('default_value', TEXT, comment='默认值'),
sa.Column('options', TEXT, comment='选项值JSON格式用于select和multiselect类型'),
# 验证规则
sa.Column('validation_rules', TEXT, comment='验证规则JSON格式'),
# 分类和排序
sa.Column('category', VARCHAR(100), comment='属性分类'),
sa.Column('sort_order', sa.Integer, nullable=False, default=0, comment='排序顺序'),
# 显示设置
sa.Column('display_width', sa.Integer, nullable=False, default=200, comment='显示宽度(像素)'),
sa.Column('display_format', VARCHAR(100), comment='显示格式'),
mysql_engine='InnoDB',
mysql_charset='utf8mb4',
mysql_collate='utf8mb4_unicode_ci',
comment='扩展属性表'
)
# 创建索引
op.create_index('idx_extended_properties_property_key', 'extended_properties', ['property_key'])
op.create_index('idx_extended_properties_property_name', 'extended_properties', ['property_name'])
op.create_index('idx_extended_properties_property_type', 'extended_properties', ['property_type'])
op.create_index('idx_extended_properties_category', 'extended_properties', ['category'])
op.create_index('idx_extended_properties_is_enabled', 'extended_properties', ['is_enabled'])
op.create_index('idx_extended_properties_is_deleted', 'extended_properties', ['is_deleted'])
op.create_index('idx_extended_properties_sort_order', 'extended_properties', ['sort_order'])
# 创建唯一约束
op.create_unique_constraint('uq_extended_properties_property_key', 'extended_properties', ['property_key'])
op.create_unique_constraint('uq_extended_properties_property_name', 'extended_properties', ['property_name'])
def downgrade():
"""删除扩展属性表"""
# 删除索引
op.drop_index('idx_extended_properties_property_key', 'extended_properties')
op.drop_index('idx_extended_properties_property_name', 'extended_properties')
op.drop_index('idx_extended_properties_property_type', 'extended_properties')
op.drop_index('idx_extended_properties_category', 'extended_properties')
op.drop_index('idx_extended_properties_is_enabled', 'extended_properties')
op.drop_index('idx_extended_properties_is_deleted', 'extended_properties')
op.drop_index('idx_extended_properties_sort_order', 'extended_properties')
# 删除唯一约束
op.drop_constraint('uq_extended_properties_property_key', 'extended_properties', type_='unique')
op.drop_constraint('uq_extended_properties_property_name', 'extended_properties', type_='unique')
# 删除表
op.drop_table('extended_properties')