From 1ea3c3eaeb4c51dd1256e7f33fe7e9ad28ce0675 Mon Sep 17 00:00:00 2001 From: foxplaying <166147707+foxplaying@users.noreply.github.com> Date: Sat, 25 Oct 2025 16:11:25 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/utils/utils_image.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/chat/utils/utils_image.py b/src/chat/utils/utils_image.py index 601373a1..bdba73b6 100644 --- a/src/chat/utils/utils_image.py +++ b/src/chat/utils/utils_image.py @@ -44,6 +44,11 @@ class ImageManager: except Exception as e: logger.error(f"数据库连接或表创建失败: {e}") + try: + self._cleanup_invalid_descriptions() + except Exception as e: + logger.warning(f"数据库清理失败: {e}") + self._initialized = True def _ensure_image_dir(self): @@ -92,6 +97,35 @@ class ImageManager: except Exception as e: logger.error(f"保存描述到数据库失败 (Peewee): {str(e)}") + @staticmethod + def _cleanup_invalid_descriptions(self): + """清理数据库中 description 为空或为 'None' 的记录""" + invalid_exact = ["", "None"] + + deleted_images = 0 + deleted_descriptions = 0 + + # 清理 Images 表 + for img in Images.select(): + desc = (img.description or "").strip() + if desc in invalid_exact: + logger.warning(f"[清理] 删除无效图片描述: {img.image_id} -> {desc}") + img.delete_instance() + deleted_images += 1 + + # 清理 ImageDescriptions 表 + for desc_row in ImageDescriptions.select(): + desc = (desc_row.description or "").strip() + if desc in invalid_exact: + logger.warning(f"[清理] 删除无效缓存描述: {desc_row.image_description_hash} -> {desc}") + desc_row.delete_instance() + deleted_descriptions += 1 + + if deleted_images or deleted_descriptions: + logger.info(f"[清理完成] 删除 Images: {deleted_images} 条, ImageDescriptions: {deleted_descriptions} 条") + else: + logger.info("[清理完成] 未发现无效描述记录") + async def get_emoji_tag(self, image_base64: str) -> str: from src.chat.emoji_system.emoji_manager import get_emoji_manager From 560bda4a65e330f3dd176ebc9894c1c93ca404f8 Mon Sep 17 00:00:00 2001 From: foxplaying <166147707+foxplaying@users.noreply.github.com> Date: Sat, 25 Oct 2025 16:19:49 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/utils/utils_image.py | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/src/chat/utils/utils_image.py b/src/chat/utils/utils_image.py index bdba73b6..4ce64eca 100644 --- a/src/chat/utils/utils_image.py +++ b/src/chat/utils/utils_image.py @@ -98,28 +98,19 @@ class ImageManager: logger.error(f"保存描述到数据库失败 (Peewee): {str(e)}") @staticmethod - def _cleanup_invalid_descriptions(self): + def _cleanup_invalid_descriptions(): """清理数据库中 description 为空或为 'None' 的记录""" - invalid_exact = ["", "None"] - - deleted_images = 0 - deleted_descriptions = 0 + invalid_values = ["", "None"] # 清理 Images 表 - for img in Images.select(): - desc = (img.description or "").strip() - if desc in invalid_exact: - logger.warning(f"[清理] 删除无效图片描述: {img.image_id} -> {desc}") - img.delete_instance() - deleted_images += 1 + deleted_images = Images.delete().where( + (Images.description >> None) | (Images.description << invalid_values) + ).execute() # 清理 ImageDescriptions 表 - for desc_row in ImageDescriptions.select(): - desc = (desc_row.description or "").strip() - if desc in invalid_exact: - logger.warning(f"[清理] 删除无效缓存描述: {desc_row.image_description_hash} -> {desc}") - desc_row.delete_instance() - deleted_descriptions += 1 + deleted_descriptions = ImageDescriptions.delete().where( + (ImageDescriptions.description >> None) | (ImageDescriptions.description << invalid_values) + ).execute() if deleted_images or deleted_descriptions: logger.info(f"[清理完成] 删除 Images: {deleted_images} 条, ImageDescriptions: {deleted_descriptions} 条")