From 6c53a3a18f0d461ebbbe20bed33783c86561f428 Mon Sep 17 00:00:00 2001 From: ninemine <1371605831@qq.com> Date: Sat, 8 Nov 2025 15:05:32 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8E=B0=E5=9C=A8=E5=85=81=E8=AE=B8=E5=9C=A8?= =?UTF-8?q?=E4=BB=BB=E6=84=8F=E4=BD=8D=E7=BD=AE=E6=B3=A8=E5=86=8C=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E6=A8=A1=E5=9E=8B,=20=E5=B9=B6=E5=85=81?= =?UTF-8?q?=E8=AE=B8=E6=B3=A8=E5=86=8C=E4=BB=BB=E6=84=8F=E6=95=B0=E9=87=8F?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CoreModules/plugin_interface.py | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) 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: ''' 继承后重写该方法注册数据库模型 '''