现在允许在任意位置注册数据库模型, 并允许注册任意数量数据库模型

This commit is contained in:
2025-11-08 15:05:32 +08:00
parent 16ef75c3ce
commit 6c53a3a18f

View File

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