diff --git a/CoreModules/plugin_interface.py b/CoreModules/plugin_interface.py index 07492e7..f1d831f 100644 --- a/CoreModules/plugin_interface.py +++ b/CoreModules/plugin_interface.py @@ -34,6 +34,16 @@ class PluginInterface(ABC): config.Log("Warning", f"{ConsoleFrontColor.YELLOW}插件{self.__class__.__name__}未实现callback方法{ConsoleFrontColor.RESET}") return "" + @final + def register_table(self, db_model: DatabaseModel) -> None: + cursor = get_db().conn.cursor() + sql = f"CREATE TABLE IF NOT EXISTS {db_model.table_name} ({', '.join([f'{name} {field_def}' for name, field_def in db_model.column_defs.items()])})" + config.Log("Info", f"{ConsoleFrontColor.LIGHTMAGENTA_EX}为表 {db_model.table_name} 创建: {sql}{ConsoleFrontColor.RESET}") + try: + cursor.execute(sql) + except Exception as e: + config.Log("Error", f"{ConsoleFrontColor.RED}为表 {db_model.table_name} 创建失败: {e}{ConsoleFrontColor.RESET}") + @final def execute(self, path:str) -> Optional[APIRouter]: ''' @@ -46,14 +56,15 @@ class PluginInterface(ABC): # 在数据库保证必要的表和列存在 db = get_db() db_model = self.register_db_model() - if db_model: - cursor = db.conn.cursor() - sql = f"CREATE TABLE IF NOT EXISTS {db_model.table_name} ({', '.join([f'{name} {field_def}' for name, field_def in db_model.column_defs.items()])})" - config.Log("Info", f"{ConsoleFrontColor.LIGHTMAGENTA_EX}为表 {db_model.table_name} 创建: {sql}{ConsoleFrontColor.RESET}") - try: - cursor.execute(sql) - except Exception as e: - config.Log("Error", f"{ConsoleFrontColor.RED}为表 {db_model.table_name} 创建失败: {e}{ConsoleFrontColor.RESET}") + + + if db_model is None: + return router + elif isinstance(db_model, DatabaseModel): + self.register_table(db_model) + else: + for model in db_model: + self.register_table(model) return router @@ -89,7 +100,7 @@ class PluginInterface(ABC): config.Log("Info", f"插件{self.__class__.__name__}已注册命令{command}") PluginInterface.plugin_instances[command] = self - def register_db_model(self) -> Optional[DatabaseModel]: + def register_db_model(self) -> List[DatabaseModel]|DatabaseModel|None: ''' 继承后重写该方法注册数据库模型 '''