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: # 发生错误时回滚连接