Browse Source

fix: 修复 connect_database 和 fetch 方法的错误处理

修复 1: 将 create_engine 移入 try 块,确保连接失败被捕获
修复 3: 在 fetch_all/fetch_one 的 except 块中添加 raise

注意:修复 3 是行为破坏性变更,调用方现在会收到异常而非 None
Sherlock 2 ngày trước cách đây
mục cha
commit
5726320603
1 tập tin đã thay đổi với 15 bổ sung13 xóa
  1. 15 13
      database/db/mysql.py

+ 15 - 13
database/db/mysql.py

@@ -34,19 +34,19 @@ class MySqlDatabaseHelper:
         # 创建数据库连接
         try:
             conn = "mysql+pymysql://" + self._user + ":" + self._passwd + "@" + self._host + ":" + str(self._port) + "/" + self._dbname
+
+            # 通过连接池创建engine
+            self.engine = create_engine(
+                conn,
+                pool_size=20, # 设置连接池大小
+                max_overflow=30, # 超过连接池大小时的额外连接数
+                pool_recycle=1800, # 回收连接时间
+                pool_pre_ping=True, # 防止断开连接
+                isolation_level="READ COMMITTED" # 降低隔离级别
+            )
         except Exception as e:
-            raise ConnectionAbortedError(f"failed to create connection string: {e}")
-        
-        # 通过连接池创建engine
-        self.engine = create_engine(
-            conn,
-            pool_size=20, # 设置连接池大小
-            max_overflow=30, # 超过连接池大小时的额外连接数
-            pool_recycle=1800, # 回收连接时间
-            pool_pre_ping=True, # 防止断开连接
-            isolation_level="READ COMMITTED" # 降低隔离级别
-        )
-        
+            raise ConnectionAbortedError(f"failed to create connection: {e}")
+
         self._DBSession = sessionmaker(bind=self.engine)
     
     def load_data_with_page(self, query, params, page_size=100000):
@@ -93,6 +93,7 @@ class MySqlDatabaseHelper:
         except SQLAlchemyError as e:
             session.rollback()
             print(f"error: {e}")
+            raise
         finally:
             session.close()
             
@@ -102,10 +103,11 @@ class MySqlDatabaseHelper:
         try:
             result = session.execute(query, params or {}).fetchone()
             return result
-            
+
         except SQLAlchemyError as e:
             session.rollback()
             print(f"error: {e}")
+            raise
         finally:
             session.close()