From da50481bd7ad65825f83b751b6ef700783264bf1 Mon Sep 17 00:00:00 2001 From: Windpicker-owo <3431391539@qq.com> Date: Sat, 1 Nov 2025 17:19:05 +0800 Subject: [PATCH] =?UTF-8?q?fix(critical):=20=E4=BF=AE=E5=A4=8DSQLite?= =?UTF-8?q?=E4=BA=8B=E5=8A=A1=E6=9C=AA=E6=8F=90=E4=BA=A4=E7=9A=84=E4=B8=A5?= =?UTF-8?q?=E9=87=8Dbug=20-=20=E5=9C=A8connection=5Fpool.get=5Fsession()?= =?UTF-8?q?=E4=B8=AD=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=8A=A8commit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/database/api/crud.py | 4 ++++ src/common/database/optimization/connection_pool.py | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/common/database/api/crud.py b/src/common/database/api/crud.py index a1245d491..0bbd76083 100644 --- a/src/common/database/api/crud.py +++ b/src/common/database/api/crud.py @@ -274,6 +274,8 @@ class CRUDBase: session.add(instance) await session.flush() await session.refresh(instance) + # 注意:commit在get_db_session的context manager退出时自动执行 + # 但为了明确性,这里不需要显式commit return instance async def update( @@ -329,6 +331,7 @@ class CRUDBase: await session.flush() await session.refresh(db_instance) instance = db_instance + # 注意:commit在get_db_session的context manager退出时自动执行 # 清除缓存 cache_key = f"{self.model_name}:id:{id}" @@ -369,6 +372,7 @@ class CRUDBase: stmt = delete(self.model).where(self.model.id == id) result = await session.execute(stmt) success = result.rowcount > 0 + # 注意:commit在get_db_session的context manager退出时自动执行 # 清除缓存 if success: diff --git a/src/common/database/optimization/connection_pool.py b/src/common/database/optimization/connection_pool.py index 78dce7e45..f32302766 100644 --- a/src/common/database/optimization/connection_pool.py +++ b/src/common/database/optimization/connection_pool.py @@ -150,6 +150,16 @@ class ConnectionPoolManager: logger.debug(f"🆕 创建连接 (池大小: {len(self._connections)})") yield connection_info.session + + # 🔧 修复:正常退出时提交事务 + # 这对SQLite至关重要,因为SQLite没有autocommit + if connection_info and connection_info.session: + try: + await connection_info.session.commit() + except Exception as commit_error: + logger.warning(f"提交事务时出错: {commit_error}") + await connection_info.session.rollback() + raise except Exception: # 发生错误时回滚连接