现在允许在任意位置注册数据库模型, 并允许注册任意数量数据库模型
This commit is contained in:
@@ -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:
|
||||||
'''
|
'''
|
||||||
继承后重写该方法注册数据库模型
|
继承后重写该方法注册数据库模型
|
||||||
'''
|
'''
|
||||||
|
|||||||
Reference in New Issue
Block a user