"""初始化 Revision ID: d6e1fac26659 Revises: Create Date: 2026-09-15 17:51:25.310996 """ from typing import Sequence, Union from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision: str = 'd6e1fac26659' down_revision: Union[str, Sequence[str], None] = None branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: """Upgrade schema.""" # ### commands auto generated by Alembic - please adjust! ### op.create_table('tornado_article', sa.Column('category_id', sa.Integer(), nullable=True, comment='分类ID'), sa.Column('title', sa.String(length=150), nullable=True, comment='文章标题'), sa.Column('cover', sa.String(length=255), nullable=True, comment='文章封面'), sa.Column('images', sa.Text(), nullable=True, comment='文章图集'), sa.Column('intro', sa.String(length=255), nullable=True, comment='文章导读'), sa.Column('content', sa.Text(), nullable=True, comment='文章内容'), sa.Column('author', sa.String(length=100), nullable=True, comment='文章作者'), sa.Column('status', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='文章状态:0-正常 1-下架'), sa.Column('click', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='文章点击率'), sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='文章排序'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='文章表' ) op.create_index(op.f('ix_tornado_article_category_id'), 'tornado_article', ['category_id'], unique=False) op.create_index(op.f('ix_tornado_article_is_delete'), 'tornado_article', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_article_status'), 'tornado_article', ['status'], unique=False) op.create_index(op.f('ix_tornado_article_title'), 'tornado_article', ['title'], unique=False) op.create_table('tornado_category', sa.Column('category_name', sa.String(length=100), nullable=False, comment='分类名称'), sa.Column('category_code', sa.String(length=100), nullable=True, comment='分类编码'), sa.Column('parent_id', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='上级ID'), sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='排序'), sa.Column('note', sa.String(length=100), nullable=True, comment='分类备注'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='文章分类表' ) op.create_index(op.f('ix_tornado_category_category_name'), 'tornado_category', ['category_name'], unique=False) op.create_index(op.f('ix_tornado_category_is_delete'), 'tornado_category', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_category_parent_id'), 'tornado_category', ['parent_id'], unique=False) op.create_table('tornado_city', sa.Column('city_code', sa.String(length=6), nullable=False, comment='城市区号'), sa.Column('area_code', sa.String(length=20), nullable=False, comment='行政编码'), sa.Column('parent_code', sa.String(length=20), nullable=True, comment='上级行政编码'), sa.Column('zip_code', sa.String(length=6), nullable=False, comment='邮政编码'), sa.Column('level', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='城市级别:1-省份 2-城市 3-县区 4-街道'), sa.Column('pid', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='上级城市ID'), sa.Column('name', sa.String(length=150), nullable=False, comment='城市名称'), sa.Column('short_name', sa.String(length=150), nullable=False, comment='城市简称'), sa.Column('full_name', sa.String(length=150), nullable=True, comment='城市全称'), sa.Column('pinyin', sa.String(length=150), nullable=True, comment='城市拼音'), sa.Column('lng', sa.String(length=150), nullable=True, comment='城市经度'), sa.Column('lat', sa.String(length=150), nullable=True, comment='城市纬度'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='城市行政区划表' ) op.create_index(op.f('ix_tornado_city_area_code'), 'tornado_city', ['area_code'], unique=False) op.create_index(op.f('ix_tornado_city_city_code'), 'tornado_city', ['city_code'], unique=False) op.create_index(op.f('ix_tornado_city_is_delete'), 'tornado_city', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_city_level'), 'tornado_city', ['level'], unique=False) op.create_index(op.f('ix_tornado_city_name'), 'tornado_city', ['name'], unique=False) op.create_index(op.f('ix_tornado_city_parent_code'), 'tornado_city', ['parent_code'], unique=False) op.create_index(op.f('ix_tornado_city_pid'), 'tornado_city', ['pid'], unique=False) op.create_table('tornado_config', sa.Column('name', sa.String(length=150), nullable=False, comment='配置名称'), sa.Column('code', sa.String(length=150), nullable=False, comment='配置编码'), sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='配置排序'), sa.Column('note', sa.String(length=255), nullable=True, comment='配置备注'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='系统配置表' ) op.create_index(op.f('ix_tornado_config_code'), 'tornado_config', ['code'], unique=False) op.create_index(op.f('ix_tornado_config_is_delete'), 'tornado_config', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_config_name'), 'tornado_config', ['name'], unique=False) op.create_table('tornado_config_item', sa.Column('name', sa.String(length=100), nullable=False, comment='配置项名称'), sa.Column('code', sa.String(length=100), nullable=False, comment='配置项编码'), sa.Column('value', sa.String(length=1000), nullable=False, comment='配置项值'), sa.Column('options', sa.String(length=255), nullable=False, comment='配置选项'), sa.Column('config_id', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='配置ID'), sa.Column('type', sa.String(length=100), nullable=False, comment='配置类型'), sa.Column('status', sa.Integer(), server_default=sa.text('1'), nullable=False, comment='配置状态:1-正常 2-停用'), sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='配置项排序'), sa.Column('note', sa.String(length=255), nullable=True, comment='配置项备注'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='配置项表' ) op.create_index(op.f('ix_tornado_config_item_config_id'), 'tornado_config_item', ['config_id'], unique=False) op.create_index(op.f('ix_tornado_config_item_is_delete'), 'tornado_config_item', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_config_item_name'), 'tornado_config_item', ['name'], unique=False) op.create_index(op.f('ix_tornado_config_item_status'), 'tornado_config_item', ['status'], unique=False) op.create_table('tornado_dept', sa.Column('name', sa.String(length=150), nullable=False, comment='部门名称'), sa.Column('type', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='部门类型:1-公司 2-子公司 3-部门 4-小组'), sa.Column('parent_id', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='上级部门ID'), sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='部门排序'), sa.Column('note', sa.String(length=255), nullable=True, comment='备注'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='部门表' ) op.create_index(op.f('ix_tornado_dept_is_delete'), 'tornado_dept', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_dept_name'), 'tornado_dept', ['name'], unique=False) op.create_index(op.f('ix_tornado_dept_parent_id'), 'tornado_dept', ['parent_id'], unique=False) op.create_table('tornado_dict', sa.Column('name', sa.String(length=150), nullable=False, comment='字典名称'), sa.Column('code', sa.String(length=150), nullable=False, comment='字典编码'), sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='字典排序'), sa.Column('note', sa.String(length=255), nullable=True, comment='字典备注'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='数据字典表' ) op.create_index(op.f('ix_tornado_dict_code'), 'tornado_dict', ['code'], unique=False) op.create_index(op.f('ix_tornado_dict_is_delete'), 'tornado_dict', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_dict_name'), 'tornado_dict', ['name'], unique=False) op.create_table('tornado_dict_item', sa.Column('name', sa.String(length=150), nullable=False, comment='字典项名称'), sa.Column('value', sa.String(length=150), nullable=False, comment='字典项值'), sa.Column('dict_id', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='字典ID'), sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='字典项顺序'), sa.Column('note', sa.String(length=255), nullable=True, comment='字典项备注'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='字典项表' ) op.create_index(op.f('ix_tornado_dict_item_dict_id'), 'tornado_dict_item', ['dict_id'], unique=False) op.create_index(op.f('ix_tornado_dict_item_is_delete'), 'tornado_dict_item', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_dict_item_name'), 'tornado_dict_item', ['name'], unique=False) op.create_table('tornado_file_template', sa.Column('name', sa.String(length=100), nullable=True, comment='模板名称'), sa.Column('code', sa.String(length=50), nullable=True, comment='模板编码'), sa.Column('file_name', sa.String(length=255), nullable=True, comment='文件名称'), sa.Column('file_path', sa.String(length=255), nullable=True, comment='文件路径'), sa.Column('note', sa.String(length=255), nullable=True, comment='文件模板备注'), sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='文件模板顺序'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='文件模板表' ) op.create_index(op.f('ix_tornado_file_template_code'), 'tornado_file_template', ['code'], unique=False) op.create_index(op.f('ix_tornado_file_template_is_delete'), 'tornado_file_template', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_file_template_name'), 'tornado_file_template', ['name'], unique=False) op.create_table('tornado_job', sa.Column('job_name', sa.String(length=255), nullable=False, comment='任务名称'), sa.Column('job_alias', sa.String(length=255), nullable=True, comment='任务别名'), sa.Column('job_group', sa.String(length=255), nullable=True, comment='任务分组'), sa.Column('job_trigger', sa.String(length=255), nullable=True, comment='任务触发器'), sa.Column('status', sa.SmallInteger(), server_default=sa.text('0'), nullable=False, comment='任务状态:0-未发布 1-运行中 2-暂停 3-删除'), sa.Column('cron_expression', sa.String(length=255), nullable=True, comment='Cron表达式'), sa.Column('execute_policy', sa.SmallInteger(), server_default=sa.text('1'), nullable=False, comment='执行策略:1-立即执行 2-执行一次 3-放弃执行'), sa.Column('is_sync', sa.SmallInteger(), server_default=sa.text('0'), nullable=False, comment='是否同步任务:0-否 1-是'), sa.Column('url', sa.String(length=255), nullable=True, comment='任务URL'), sa.Column('params', sa.Text(), nullable=True, comment='任务参数'), sa.Column('note', sa.String(length=255), nullable=True, comment='任务备注'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='定时任务表' ) op.create_index(op.f('ix_tornado_job_is_delete'), 'tornado_job', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_job_job_name'), 'tornado_job', ['job_name'], unique=False) op.create_index(op.f('ix_tornado_job_status'), 'tornado_job', ['status'], unique=False) op.create_table('tornado_job_log', sa.Column('job_id', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='任务ID'), sa.Column('job_name', sa.String(length=255), nullable=False, comment='任务名称'), sa.Column('job_group', sa.String(length=255), nullable=True, comment='任务分组'), sa.Column('job_trigger', sa.String(length=255), nullable=True, comment='任务触发器'), sa.Column('job_message', sa.String(length=500), nullable=True, comment='任务日志信息'), sa.Column('cron_expression', sa.String(length=255), nullable=True, comment='Cron表达式'), sa.Column('status', sa.SmallInteger(), server_default=sa.text('0'), nullable=False, comment='执行状态:0-正常 1-失败'), sa.Column('start_time', sa.DateTime(), nullable=True, comment='执行开始时间'), sa.Column('end_time', sa.DateTime(), nullable=True, comment='执行结束时间'), sa.Column('consume_time', sa.BigInteger(), server_default=sa.text('0'), nullable=False, comment='执行耗时(毫秒)'), sa.Column('exception_info', sa.Text(), nullable=True, comment='异常信息'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='定时任务日志表' ) op.create_index(op.f('ix_tornado_job_log_is_delete'), 'tornado_job_log', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_job_log_job_id'), 'tornado_job_log', ['job_id'], unique=False) op.create_index(op.f('ix_tornado_job_log_status'), 'tornado_job_log', ['status'], unique=False) op.create_table('tornado_level', sa.Column('name', sa.String(length=255), nullable=False, comment='职级名称'), sa.Column('status', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='职级状态:1-在用 2-停用'), sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='职级排序'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='职级表' ) op.create_index(op.f('ix_tornado_level_is_delete'), 'tornado_level', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_level_name'), 'tornado_level', ['name'], unique=False) op.create_index(op.f('ix_tornado_level_status'), 'tornado_level', ['status'], unique=False) op.create_table('tornado_link', sa.Column('name', sa.String(length=255), nullable=False, comment='友链名称'), sa.Column('type', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='友链类型:1-友情链接 2-合作伙伴'), sa.Column('url', sa.String(length=255), nullable=True, comment='友链URL'), sa.Column('form', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='友链形式:1-文字链接 2-图片链接'), sa.Column('image', sa.String(length=255), nullable=True, comment='友链图片'), sa.Column('status', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='友链状态:1-正常 2-停用'), sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='友链顺序'), sa.Column('note', sa.String(length=255), nullable=True, comment='友链备注'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='友链表' ) op.create_index(op.f('ix_tornado_link_is_delete'), 'tornado_link', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_link_name'), 'tornado_link', ['name'], unique=False) op.create_index(op.f('ix_tornado_link_status'), 'tornado_link', ['status'], unique=False) op.create_table('tornado_login_log', sa.Column('username', sa.String(length=50), nullable=False, comment='登录账号'), sa.Column('log_type', sa.Integer(), server_default=sa.text('1'), nullable=False, comment='日志类型:1-登录 2-退出'), sa.Column('source', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='登录来源:0-后台 1-前台'), sa.Column('method', sa.String(length=10), nullable=False, comment='请求方法'), sa.Column('request_method', sa.String(length=10), nullable=False, comment='请求方式'), sa.Column('url', sa.String(length=500), nullable=False, comment='请求URL'), sa.Column('param', sa.Text(), nullable=True, comment='请求参数'), sa.Column('result', sa.Text(), nullable=False, comment='返回结果'), sa.Column('ip', sa.String(length=50), nullable=False, comment='IP地址'), sa.Column('location', sa.String(length=100), nullable=False, comment='IP归属地'), sa.Column('os', sa.String(length=100), nullable=False, comment='操作系统'), sa.Column('browser', sa.String(length=100), nullable=False, comment='浏览器'), sa.Column('consume_time', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='请求耗时(毫秒)'), sa.Column('status', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='操作状态:0-正常 1-异常'), sa.Column('error', sa.Text(), nullable=True, comment='错误信息'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='登录日志表' ) op.create_index(op.f('ix_tornado_login_log_is_delete'), 'tornado_login_log', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_login_log_log_type'), 'tornado_login_log', ['log_type'], unique=False) op.create_index(op.f('ix_tornado_login_log_username'), 'tornado_login_log', ['username'], unique=False) op.create_table('tornado_menu', sa.Column('name', sa.String(length=150), nullable=False, comment='菜单名称'), sa.Column('icon', sa.String(length=50), nullable=True, comment='菜单图标'), sa.Column('icon2', sa.String(length=50), nullable=True, comment='菜单图标'), sa.Column('parent_id', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='上级ID'), sa.Column('path', sa.String(length=255), nullable=True, comment='菜单路径'), sa.Column('component', sa.String(length=255), nullable=True, comment='菜单组件'), sa.Column('permission', sa.String(length=150), nullable=True, comment='权限节点'), sa.Column('target', sa.String(length=30), nullable=True, comment='打开方式:1-内部打开 2-外部打开'), sa.Column('type', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='菜单类型:0-菜单 1-节点'), sa.Column('status', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='菜单状态:1-正常 2-停用'), sa.Column('hide', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='是否可见:0-可见 1-不可见'), sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='排序'), sa.Column('note', sa.String(length=255), nullable=True, comment='备注'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='菜单表' ) op.create_index(op.f('ix_tornado_menu_is_delete'), 'tornado_menu', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_menu_name'), 'tornado_menu', ['name'], unique=False) op.create_index(op.f('ix_tornado_menu_parent_id'), 'tornado_menu', ['parent_id'], unique=False) op.create_index(op.f('ix_tornado_menu_permission'), 'tornado_menu', ['permission'], unique=False) op.create_index(op.f('ix_tornado_menu_status'), 'tornado_menu', ['status'], unique=False) op.create_index(op.f('ix_tornado_menu_type'), 'tornado_menu', ['type'], unique=False) op.create_table('tornado_notice', sa.Column('title', sa.String(length=255), nullable=False, comment='通知标题'), sa.Column('cover', sa.String(length=255), nullable=True, comment='通知封面'), sa.Column('type', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='通知类型:1-通知 2-公告'), sa.Column('click_num', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='点击率'), sa.Column('status', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='通知状态:1-正常 2-停用'), sa.Column('content', sa.Text(), nullable=True, comment='通知公告内容'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='通知公告表' ) op.create_index(op.f('ix_tornado_notice_is_delete'), 'tornado_notice', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_notice_status'), 'tornado_notice', ['status'], unique=False) op.create_index(op.f('ix_tornado_notice_title'), 'tornado_notice', ['title'], unique=False) op.create_index(op.f('ix_tornado_notice_type'), 'tornado_notice', ['type'], unique=False) op.create_table('tornado_operation_log', sa.Column('title', sa.String(length=150), nullable=False, comment='请求标题'), sa.Column('type', sa.Integer(), server_default=sa.text('1'), nullable=False, comment='请求类型:1-新增 2-修改 3-删除'), sa.Column('source', sa.SmallInteger(), server_default=sa.text('1'), nullable=False, comment='请求来源:1-PC端 2-移动端'), sa.Column('method', sa.String(length=100), nullable=False, comment='请求方法(操作)'), sa.Column('request_method', sa.String(length=100), nullable=False, comment='请求方式(HTTP)'), sa.Column('url', sa.String(length=1000), nullable=False, comment='请求URL'), sa.Column('param', sa.Text(), nullable=True, comment='请求参数'), sa.Column('result', sa.Text(), nullable=True, comment='请求结果'), sa.Column('ip', sa.String(length=100), nullable=False, comment='请求IP'), sa.Column('location', sa.String(length=255), nullable=False, comment='请求所在区域'), sa.Column('os', sa.String(length=100), nullable=False, comment='操作系统'), sa.Column('browser', sa.String(length=100), nullable=False, comment='浏览器'), sa.Column('consume_time', sa.BigInteger(), server_default=sa.text('0'), nullable=False, comment='请求耗时(毫秒)'), sa.Column('status', sa.SmallInteger(), server_default=sa.text('0'), nullable=False, comment='请求状态:0-成功 1-失败'), sa.Column('error', sa.Text(), nullable=True, comment='错误描述'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='操作日志表' ) op.create_index(op.f('ix_tornado_operation_log_is_delete'), 'tornado_operation_log', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_operation_log_title'), 'tornado_operation_log', ['title'], unique=False) op.create_index(op.f('ix_tornado_operation_log_type'), 'tornado_operation_log', ['type'], unique=False) op.create_table('tornado_param', sa.Column('name', sa.String(length=100), nullable=False, comment='参数名称'), sa.Column('code', sa.String(length=100), nullable=False, comment='参数编码'), sa.Column('value', sa.String(length=255), nullable=False, comment='参数值'), sa.Column('type', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='参数类型:0-系统 1-业务'), sa.Column('status', sa.Integer(), server_default=sa.text('1'), nullable=False, comment='参数状态:1-正常 2-禁用'), sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='参数排序'), sa.Column('note', sa.String(length=255), nullable=True, comment='参数备注'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='系统参数表' ) op.create_index(op.f('ix_tornado_param_code'), 'tornado_param', ['code'], unique=False) op.create_index(op.f('ix_tornado_param_is_delete'), 'tornado_param', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_param_name'), 'tornado_param', ['name'], unique=False) op.create_index(op.f('ix_tornado_param_status'), 'tornado_param', ['status'], unique=False) op.create_table('tornado_position', sa.Column('name', sa.String(length=255), nullable=False, comment='岗位名称'), sa.Column('status', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='岗位状态:1-在用 2-停用'), sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='岗位排序'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='岗位表' ) op.create_index(op.f('ix_tornado_position_is_delete'), 'tornado_position', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_position_name'), 'tornado_position', ['name'], unique=False) op.create_index(op.f('ix_tornado_position_status'), 'tornado_position', ['status'], unique=False) op.create_table('tornado_role', sa.Column('name', sa.String(length=150), nullable=False, comment='角色名称'), sa.Column('code', sa.String(length=30), nullable=False, comment='角色编码'), sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='角色排序'), sa.Column('note', sa.String(length=255), nullable=True, comment='角色备注'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='角色表' ) op.create_index(op.f('ix_tornado_role_code'), 'tornado_role', ['code'], unique=False) op.create_index(op.f('ix_tornado_role_is_delete'), 'tornado_role', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_role_name'), 'tornado_role', ['name'], unique=False) op.create_table('tornado_role_menu', sa.Column('role_id', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='角色ID'), sa.Column('menu_id', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='菜单ID'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='角色菜单关联表' ) op.create_index(op.f('ix_tornado_role_menu_is_delete'), 'tornado_role_menu', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_role_menu_menu_id'), 'tornado_role_menu', ['menu_id'], unique=False) op.create_index(op.f('ix_tornado_role_menu_role_id'), 'tornado_role_menu', ['role_id'], unique=False) op.create_table('tornado_user', sa.Column('code', sa.String(length=100), server_default=sa.text("''"), nullable=False, comment='用户编码'), sa.Column('realname', sa.String(length=150), nullable=False, comment='用户姓名'), sa.Column('gender', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='性别:1-男 2-女 3-保密'), sa.Column('avatar', sa.String(length=255), nullable=False, comment='用户头像'), sa.Column('mobile', sa.String(length=30), nullable=False, comment='手机号'), sa.Column('email', sa.String(length=30), nullable=False, comment='邮箱'), sa.Column('dept_id', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='部门ID'), sa.Column('level_id', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='职级ID'), sa.Column('position_id', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='岗位ID'), sa.Column('province_code', sa.String(length=30), nullable=False, comment='省份编码'), sa.Column('city_code', sa.String(length=30), nullable=False, comment='城市编码'), sa.Column('district_code', sa.String(length=30), nullable=False, comment='县区编码'), sa.Column('street_code', sa.String(length=30), nullable=False, comment='街道编码'), sa.Column('city_info', sa.String(length=255), nullable=True, comment='省市区信息'), sa.Column('address', sa.String(length=255), nullable=False, comment='详细地址'), sa.Column('username', sa.String(length=30), nullable=True, comment='用户名'), sa.Column('password', sa.String(length=255), nullable=True, comment='密码'), sa.Column('salt', sa.String(length=30), nullable=True, comment='加密盐'), sa.Column('intro', sa.String(length=255), nullable=True, comment='个人简介'), sa.Column('status', sa.Integer(), server_default=sa.text('1'), nullable=True, comment='状态:1-正常 2-禁用'), sa.Column('sort', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='排序'), sa.Column('note', sa.String(length=255), nullable=True, comment='个人备注'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='用户表' ) op.create_index(op.f('ix_tornado_user_code'), 'tornado_user', ['code'], unique=False) op.create_index(op.f('ix_tornado_user_dept_id'), 'tornado_user', ['dept_id'], unique=False) op.create_index(op.f('ix_tornado_user_email'), 'tornado_user', ['email'], unique=False) op.create_index(op.f('ix_tornado_user_is_delete'), 'tornado_user', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_user_mobile'), 'tornado_user', ['mobile'], unique=False) op.create_index(op.f('ix_tornado_user_realname'), 'tornado_user', ['realname'], unique=False) op.create_index(op.f('ix_tornado_user_status'), 'tornado_user', ['status'], unique=False) op.create_index(op.f('ix_tornado_user_username'), 'tornado_user', ['username'], unique=False) op.create_table('tornado_user_role', sa.Column('user_id', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='用户ID'), sa.Column('role_id', sa.Integer(), server_default=sa.text('0'), nullable=False, comment='角色ID'), sa.Column('id', sa.Integer(), autoincrement=True, nullable=False, comment='主键ID'), sa.Column('create_user', sa.String(length=50), nullable=True, comment='创建人'), sa.Column('create_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='创建时间'), sa.Column('update_user', sa.String(length=50), nullable=True, comment='更新人'), sa.Column('update_time', sa.DateTime(), server_default=sa.text('now()'), nullable=True, comment='更新时间'), sa.Column('is_delete', sa.Integer(), server_default=sa.text('0'), nullable=True, comment='删除标识:0-正常 1-已删除'), sa.PrimaryKeyConstraint('id'), comment='用户角色关联表' ) op.create_index(op.f('ix_tornado_user_role_is_delete'), 'tornado_user_role', ['is_delete'], unique=False) op.create_index(op.f('ix_tornado_user_role_role_id'), 'tornado_user_role', ['role_id'], unique=False) op.create_index(op.f('ix_tornado_user_role_user_id'), 'tornado_user_role', ['user_id'], unique=False) # ### end Alembic commands ### def downgrade() -> None: """Downgrade schema.""" # ### commands auto generated by Alembic - please adjust! ### op.drop_index(op.f('ix_tornado_user_role_user_id'), table_name='tornado_user_role') op.drop_index(op.f('ix_tornado_user_role_role_id'), table_name='tornado_user_role') op.drop_index(op.f('ix_tornado_user_role_is_delete'), table_name='tornado_user_role') op.drop_table('tornado_user_role') op.drop_index(op.f('ix_tornado_user_username'), table_name='tornado_user') op.drop_index(op.f('ix_tornado_user_status'), table_name='tornado_user') op.drop_index(op.f('ix_tornado_user_realname'), table_name='tornado_user') op.drop_index(op.f('ix_tornado_user_mobile'), table_name='tornado_user') op.drop_index(op.f('ix_tornado_user_is_delete'), table_name='tornado_user') op.drop_index(op.f('ix_tornado_user_email'), table_name='tornado_user') op.drop_index(op.f('ix_tornado_user_dept_id'), table_name='tornado_user') op.drop_index(op.f('ix_tornado_user_code'), table_name='tornado_user') op.drop_table('tornado_user') op.drop_index(op.f('ix_tornado_role_menu_role_id'), table_name='tornado_role_menu') op.drop_index(op.f('ix_tornado_role_menu_menu_id'), table_name='tornado_role_menu') op.drop_index(op.f('ix_tornado_role_menu_is_delete'), table_name='tornado_role_menu') op.drop_table('tornado_role_menu') op.drop_index(op.f('ix_tornado_role_name'), table_name='tornado_role') op.drop_index(op.f('ix_tornado_role_is_delete'), table_name='tornado_role') op.drop_index(op.f('ix_tornado_role_code'), table_name='tornado_role') op.drop_table('tornado_role') op.drop_index(op.f('ix_tornado_position_status'), table_name='tornado_position') op.drop_index(op.f('ix_tornado_position_name'), table_name='tornado_position') op.drop_index(op.f('ix_tornado_position_is_delete'), table_name='tornado_position') op.drop_table('tornado_position') op.drop_index(op.f('ix_tornado_param_status'), table_name='tornado_param') op.drop_index(op.f('ix_tornado_param_name'), table_name='tornado_param') op.drop_index(op.f('ix_tornado_param_is_delete'), table_name='tornado_param') op.drop_index(op.f('ix_tornado_param_code'), table_name='tornado_param') op.drop_table('tornado_param') op.drop_index(op.f('ix_tornado_operation_log_type'), table_name='tornado_operation_log') op.drop_index(op.f('ix_tornado_operation_log_title'), table_name='tornado_operation_log') op.drop_index(op.f('ix_tornado_operation_log_is_delete'), table_name='tornado_operation_log') op.drop_table('tornado_operation_log') op.drop_index(op.f('ix_tornado_notice_type'), table_name='tornado_notice') op.drop_index(op.f('ix_tornado_notice_title'), table_name='tornado_notice') op.drop_index(op.f('ix_tornado_notice_status'), table_name='tornado_notice') op.drop_index(op.f('ix_tornado_notice_is_delete'), table_name='tornado_notice') op.drop_table('tornado_notice') op.drop_index(op.f('ix_tornado_menu_type'), table_name='tornado_menu') op.drop_index(op.f('ix_tornado_menu_status'), table_name='tornado_menu') op.drop_index(op.f('ix_tornado_menu_permission'), table_name='tornado_menu') op.drop_index(op.f('ix_tornado_menu_parent_id'), table_name='tornado_menu') op.drop_index(op.f('ix_tornado_menu_name'), table_name='tornado_menu') op.drop_index(op.f('ix_tornado_menu_is_delete'), table_name='tornado_menu') op.drop_table('tornado_menu') op.drop_index(op.f('ix_tornado_login_log_username'), table_name='tornado_login_log') op.drop_index(op.f('ix_tornado_login_log_log_type'), table_name='tornado_login_log') op.drop_index(op.f('ix_tornado_login_log_is_delete'), table_name='tornado_login_log') op.drop_table('tornado_login_log') op.drop_index(op.f('ix_tornado_link_status'), table_name='tornado_link') op.drop_index(op.f('ix_tornado_link_name'), table_name='tornado_link') op.drop_index(op.f('ix_tornado_link_is_delete'), table_name='tornado_link') op.drop_table('tornado_link') op.drop_index(op.f('ix_tornado_level_status'), table_name='tornado_level') op.drop_index(op.f('ix_tornado_level_name'), table_name='tornado_level') op.drop_index(op.f('ix_tornado_level_is_delete'), table_name='tornado_level') op.drop_table('tornado_level') op.drop_index(op.f('ix_tornado_job_log_status'), table_name='tornado_job_log') op.drop_index(op.f('ix_tornado_job_log_job_id'), table_name='tornado_job_log') op.drop_index(op.f('ix_tornado_job_log_is_delete'), table_name='tornado_job_log') op.drop_table('tornado_job_log') op.drop_index(op.f('ix_tornado_job_status'), table_name='tornado_job') op.drop_index(op.f('ix_tornado_job_job_name'), table_name='tornado_job') op.drop_index(op.f('ix_tornado_job_is_delete'), table_name='tornado_job') op.drop_table('tornado_job') op.drop_index(op.f('ix_tornado_file_template_name'), table_name='tornado_file_template') op.drop_index(op.f('ix_tornado_file_template_is_delete'), table_name='tornado_file_template') op.drop_index(op.f('ix_tornado_file_template_code'), table_name='tornado_file_template') op.drop_table('tornado_file_template') op.drop_index(op.f('ix_tornado_dict_item_name'), table_name='tornado_dict_item') op.drop_index(op.f('ix_tornado_dict_item_is_delete'), table_name='tornado_dict_item') op.drop_index(op.f('ix_tornado_dict_item_dict_id'), table_name='tornado_dict_item') op.drop_table('tornado_dict_item') op.drop_index(op.f('ix_tornado_dict_name'), table_name='tornado_dict') op.drop_index(op.f('ix_tornado_dict_is_delete'), table_name='tornado_dict') op.drop_index(op.f('ix_tornado_dict_code'), table_name='tornado_dict') op.drop_table('tornado_dict') op.drop_index(op.f('ix_tornado_dept_parent_id'), table_name='tornado_dept') op.drop_index(op.f('ix_tornado_dept_name'), table_name='tornado_dept') op.drop_index(op.f('ix_tornado_dept_is_delete'), table_name='tornado_dept') op.drop_table('tornado_dept') op.drop_index(op.f('ix_tornado_config_item_status'), table_name='tornado_config_item') op.drop_index(op.f('ix_tornado_config_item_name'), table_name='tornado_config_item') op.drop_index(op.f('ix_tornado_config_item_is_delete'), table_name='tornado_config_item') op.drop_index(op.f('ix_tornado_config_item_config_id'), table_name='tornado_config_item') op.drop_table('tornado_config_item') op.drop_index(op.f('ix_tornado_config_name'), table_name='tornado_config') op.drop_index(op.f('ix_tornado_config_is_delete'), table_name='tornado_config') op.drop_index(op.f('ix_tornado_config_code'), table_name='tornado_config') op.drop_table('tornado_config') op.drop_index(op.f('ix_tornado_city_pid'), table_name='tornado_city') op.drop_index(op.f('ix_tornado_city_parent_code'), table_name='tornado_city') op.drop_index(op.f('ix_tornado_city_name'), table_name='tornado_city') op.drop_index(op.f('ix_tornado_city_level'), table_name='tornado_city') op.drop_index(op.f('ix_tornado_city_is_delete'), table_name='tornado_city') op.drop_index(op.f('ix_tornado_city_city_code'), table_name='tornado_city') op.drop_index(op.f('ix_tornado_city_area_code'), table_name='tornado_city') op.drop_table('tornado_city') op.drop_index(op.f('ix_tornado_category_parent_id'), table_name='tornado_category') op.drop_index(op.f('ix_tornado_category_is_delete'), table_name='tornado_category') op.drop_index(op.f('ix_tornado_category_category_name'), table_name='tornado_category') op.drop_table('tornado_category') op.drop_index(op.f('ix_tornado_article_title'), table_name='tornado_article') op.drop_index(op.f('ix_tornado_article_status'), table_name='tornado_article') op.drop_index(op.f('ix_tornado_article_is_delete'), table_name='tornado_article') op.drop_index(op.f('ix_tornado_article_category_id'), table_name='tornado_article') op.drop_table('tornado_article') # ### end Alembic commands ###