AnlaAnla 2 недель назад
Родитель
Сommit
56a7780f40
3 измененных файлов с 28 добавлено и 3 удалено
  1. 5 0
      app/core/database_loader.py
  2. 1 2
      app/crud/crud_card.py
  3. 22 1
      app/utils/scheme.py

+ 5 - 0
app/core/database_loader.py

@@ -119,6 +119,11 @@ def get_db_connection():
     db_conn = None
     db_conn = None
     try:
     try:
         db_conn = db_connection_pool.get_connection()
         db_conn = db_connection_pool.get_connection()
+
+        # 强制设置当前数据库会话时区为东八区
+        cursor = db_conn.cursor()
+        cursor.execute("SET time_zone = '+08:00';")
+        cursor.close()
         yield db_conn
         yield db_conn
     except mysql.connector.Error as err:
     except mysql.connector.Error as err:
         logger.error(f"获取数据库连接失败: {err}")
         logger.error(f"获取数据库连接失败: {err}")

+ 1 - 2
app/crud/crud_card.py

@@ -41,14 +41,13 @@ def update_card_scores_and_status(db_conn: PooledMySQLConnection, card_id: int):
         # 3. 更新 cards 表
         # 3. 更新 cards 表
         query_update_card = (
         query_update_card = (
             f"UPDATE {settings.DB_CARD_TABLE_NAME} SET "
             f"UPDATE {settings.DB_CARD_TABLE_NAME} SET "
-            "detection_score = %s, modified_score = %s, is_edited = %s, updated_at = %s "
+            "detection_score = %s, modified_score = %s, is_edited = %s, updated_at = NOW() "
             "WHERE id = %s"
             "WHERE id = %s"
         )
         )
         params = (
         params = (
             scores_data["detection_score"],
             scores_data["detection_score"],
             scores_data["modified_score"],
             scores_data["modified_score"],
             scores_data["is_edited"],
             scores_data["is_edited"],
-            datetime.now(),
             card_id,
             card_id,
         )
         )
         cursor.execute(query_update_card, params)
         cursor.execute(query_update_card, params)

+ 22 - 1
app/utils/scheme.py

@@ -2,7 +2,7 @@ import json
 from datetime import datetime
 from datetime import datetime
 from pathlib import Path
 from pathlib import Path
 from typing import Optional, Dict, Any, List
 from typing import Optional, Dict, Any, List
-from pydantic import BaseModel, field_validator, Field
+from pydantic import BaseModel, field_validator, Field, field_serializer
 from enum import Enum
 from enum import Enum
 
 
 
 
@@ -86,6 +86,13 @@ class CardImageResponse(BaseModel):
                 raise ValueError("Invalid JSON string in database")
                 raise ValueError("Invalid JSON string in database")
         return v
         return v
 
 
+        # 拦截序列化,格式化掉中间的 "T"
+    @field_serializer('created_at', 'updated_at', check_fields=False)
+    def serialize_datetime(self, dt: datetime, _info):
+        if dt is not None:
+            return dt.strftime('%Y-%m-%d %H:%M:%S')
+        return dt
+
 
 
 class CardDetailResponse(BaseModel):
 class CardDetailResponse(BaseModel):
     """用于响应单个卡牌详细信息的模型 (主键为 id)"""
     """用于响应单个卡牌详细信息的模型 (主键为 id)"""
@@ -108,6 +115,13 @@ class CardDetailResponse(BaseModel):
     class Config:
     class Config:
         from_attributes = True
         from_attributes = True
 
 
+    # 拦截序列化,格式化掉中间的 "T"
+    @field_serializer('created_at', 'updated_at', check_fields=False)
+    def serialize_datetime(self, dt: datetime, _info):
+        if dt is not None:
+            return dt.strftime('%Y-%m-%d %H:%M:%S')
+        return dt
+
 
 
 class ImageJsonPairResponse(BaseModel):
 class ImageJsonPairResponse(BaseModel):
     id: int
     id: int
@@ -159,6 +173,13 @@ class CardListDetailResponse(BaseModel):
     class Config:
     class Config:
         from_attributes = True
         from_attributes = True
 
 
+        # 拦截序列化,格式化掉中间的 "T"
+    @field_serializer('created_at', 'updated_at', check_fields=False)
+    def serialize_datetime(self, dt: datetime, _info):
+        if dt is not None:
+            return dt.strftime('%Y-%m-%d %H:%M:%S')
+        return dt
+
 
 
 class CardListWithTotal(BaseModel):
 class CardListWithTotal(BaseModel):
     total: int
     total: int