From e4f7c1fe6274d5f5ecb55d82ad453bcd017932db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A2=A8=E6=A2=93=E6=9F=92?= <1787882683@qq.com> Date: Fri, 16 May 2025 17:34:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=80=BB=E8=BE=91=EF=BC=8C=E7=A1=AE?= =?UTF-8?q?=E4=BF=9D=E6=95=B0=E6=8D=AE=E5=BA=93=E8=BF=9E=E6=8E=A5=E6=9C=89?= =?UTF-8?q?=E6=95=88=E5=B9=B6=E6=A3=80=E6=9F=A5=E8=A1=A8=E5=8F=8A=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E7=9A=84=E5=AD=98=E5=9C=A8=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/emoji_system/emoji_manager.py | 25 +++++++++++++++---------- src/common/database/database_model.py | 23 ++++++++++++++++++++--- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/chat/emoji_system/emoji_manager.py b/src/chat/emoji_system/emoji_manager.py index 7b5574691..cb70dba05 100644 --- a/src/chat/emoji_system/emoji_manager.py +++ b/src/chat/emoji_system/emoji_manager.py @@ -383,17 +383,22 @@ class EmojiManager: def initialize(self): """初始化数据库连接和表情目录""" - if not self._initialized: - try: - # Ensure Peewee database connection is up and tables are created - if not peewee_db.is_closed(): - peewee_db.connect(reuse_if_open=True) - Emoji.create_table(safe=True) # Ensures table exists + peewee_db.connect(reuse_if_open=True) + if peewee_db.is_closed(): + raise RuntimeError("数据库连接失败") + _ensure_emoji_dir() + Emoji.create_table(safe=True) # Ensures table exists + # if not self._initialized: + # try: + # # Ensure Peewee database connection is up and tables are created + + + - _ensure_emoji_dir() - self._initialized = True - except Exception as e: - logger.exception(f"初始化表情管理器失败: {e}") + + # self._initialized = True + # except Exception as e: + # logger.exception(f"初始化表情管理器失败: {e}") def _ensure_db(self): """确保数据库已初始化""" diff --git a/src/common/database/database_model.py b/src/common/database/database_model.py index d885312b0..68b73a7b4 100644 --- a/src/common/database/database_model.py +++ b/src/common/database/database_model.py @@ -300,7 +300,10 @@ def create_tables(): def initialize_database(): """ 检查所有定义的表是否存在,如果不存在则创建它们。 + 检查所有表的所有字段是否存在,如果缺失则警告用户并退出程序。 """ + import sys + models = [ ChatStreams, LLMUsage, @@ -319,12 +322,26 @@ def initialize_database(): try: with db: # 管理 table_exists 检查的连接 for model in models: + table_name = model._meta.table_name if not db.table_exists(model): - logger.warning(f"表 '{model._meta.table_name}' 未找到。") + logger.warning(f"表 '{table_name}' 未找到。") needs_creation = True break # 一个表丢失,无需进一步检查。 + if not needs_creation: + # 检查字段 + for model in models: + table_name = model._meta.table_name + cursor = db.execute_sql(f"PRAGMA table_info('{table_name}')") + existing_columns = {row[1] for row in cursor.fetchall()} + model_fields = model._meta.fields + for field_name in model_fields: + if field_name not in existing_columns: + logger.error( + f"表 '{table_name}' 缺失字段 '{field_name}',请手动迁移数据库结构后重启程序。" + ) + sys.exit(1) except Exception as e: - logger.exception(f"检查表是否存在时出错: {e}") + logger.exception(f"检查表或字段是否存在时出错: {e}") # 如果检查失败(例如数据库不可用),则退出 return @@ -336,7 +353,7 @@ def initialize_database(): except Exception as e: logger.exception(f"创建表期间出错: {e}") else: - logger.info("所有数据库表均已存在。") + logger.info("所有数据库表及字段均已存在。") # 模块加载时调用初始化函数