#!/usr/bin/python# -*- coding: utf-8 -*-# @version : 1.0# @Create Time : 2022年11月23日 11:21# @File : initialize.py# @IDE : PyCharm# @desc : 简要说明from enum import Enumfrom sqlalchemy import insertfrom core.database import db_getterfrom utils.excel.excel_manage import ExcelManagefrom application.settings import BASE_DIR, VERSIONimport osfrom apps.vadmin.auth import models as auth_modelsfrom apps.vadmin.system import models as system_modelsfrom apps.vadmin.help import models as help_modelsimport subprocessfrom html import escapeclass Environment(str, Enum):dev = "dev"pro = "pro"class InitializeData:"""初始化数据生成步骤:1. 读取数据2. 获取数据库3. 创建数据"""SCRIPT_DIR = os.path.join(BASE_DIR, 'scripts', 'initialize')def __init__(self):self.sheet_names = []self.datas = {}self.ex = Noneself.db = Noneself.__serializer_data()self.__get_sheet_data()@classmethoddef migrate_model(cls, env: Environment = Environment.pro):"""模型迁移映射到数据库"""subprocess.check_call(['alembic', '--name', f'{env.value}', 'revision', '--autogenerate', '-m', f'{VERSION}'], cwd=BASE_DIR)subprocess.check_call(['alembic', '--name', f'{env.value}', 'upgrade', 'head'], cwd=BASE_DIR)print(f"环境:{env}{VERSION} 数据库表迁移完成")def __serializer_data(self):"""序列化数据,将excel数据转为python对象"""self.ex = ExcelManage()self.ex.open_workbook(os.path.join(self.SCRIPT_DIR, 'data', 'init.xlsx'), read_only=True)self.sheet_names = self.ex.get_sheets()def __get_sheet_data(self):"""获取工作区数据"""for sheet in self.sheet_names:sheet_data = []self.ex.open_sheet(sheet)headers = self.ex.get_header()datas = self.ex.readlines(min_row=2, max_col=len(headers))for row in datas:sheet_data.append(dict(zip(headers, row)))self.datas[sheet] = sheet_dataasync def __generate_data(self, table_name: str, model):"""生成数据:param table_name: 表名:param model: 数据表模型"""async_session = db_getter()db = await async_session.__anext__()datas = self.datas.get(table_name)escaped_datas = [{k: escape(v) if isinstance(v, str) else v for k, v in d.items()} for d in datas]await db.execute(insert(model), escaped_datas)await db.flush()await db.commit()print(f"{table_name} 表数据已生成")async def generate_dept(self):"""生成部门详情数据"""await self.__generate_data("vadmin_auth_dept", auth_models.VadminDept)async def generate_user_dept(self):"""生成用户关联部门详情数据"""await self.__generate_data("vadmin_auth_user_depts", auth_models.vadmin_auth_user_depts)async def generate_menu(self):"""生成菜单数据"""await self.__generate_data("vadmin_auth_menu", auth_models.VadminMenu)async def generate_role(self):"""生成角色"""await self.__generate_data("vadmin_auth_role", auth_models.VadminRole)async def generate_user(self):"""生成用户"""await self.__generate_data("vadmin_auth_user", auth_models.VadminUser)async def generate_user_role(self):"""生成用户"""await self.__generate_data("vadmin_auth_user_roles", auth_models.vadmin_auth_user_roles)async def generate_system_tab(self):"""生成系统配置分类数据"""await self.__generate_data("vadmin_system_settings_tab", system_models.VadminSystemSettingsTab)async def generate_system_config(self):"""生成系统配置数据"""await self.__generate_data("vadmin_system_settings", system_models.VadminSystemSettings)async def generate_dict_type(self):"""生成字典类型数据"""await self.__generate_data("vadmin_system_dict_type", system_models.VadminDictType)async def generate_dict_details(self):"""生成字典详情数据"""await self.__generate_data("vadmin_system_dict_details", system_models.VadminDictDetails)async def generate_help_issue_category(self):"""生成常见问题类别数据"""await self.__generate_data("vadmin_help_issue_category", help_models.VadminIssueCategory)async def generate_help_issue(self):"""生成常见问题详情数据"""await self.__generate_data("vadmin_help_issue", help_models.VadminIssue)async def run(self, env: Environment = Environment.pro):"""执行初始化工作"""self.migrate_model(env)await self.generate_menu()await self.generate_role()await self.generate_dept()await self.generate_user()await self.generate_user_dept()await self.generate_user_role()await self.generate_system_tab()await self.generate_dict_type()await self.generate_system_config()await self.generate_dict_details()await self.generate_help_issue_category()await self.generate_help_issue()print(f"环境:{env}{VERSION} 数据已初始化完成")
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。