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')
|