98 lines
4.6 KiB
Python
98 lines
4.6 KiB
Python
#!/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') |