AnlaAnla vor 2 Wochen
Ursprung
Commit
56a7780f40
3 geänderte Dateien mit 28 neuen und 3 gelöschten Zeilen
  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
     try:
         db_conn = db_connection_pool.get_connection()
+
+        # 强制设置当前数据库会话时区为东八区
+        cursor = db_conn.cursor()
+        cursor.execute("SET time_zone = '+08:00';")
+        cursor.close()
         yield db_conn
     except mysql.connector.Error as 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 表
         query_update_card = (
             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"
         )
         params = (
             scores_data["detection_score"],
             scores_data["modified_score"],
             scores_data["is_edited"],
-            datetime.now(),
             card_id,
         )
         cursor.execute(query_update_card, params)

+ 22 - 1
app/utils/scheme.py

@@ -2,7 +2,7 @@ import json
 from datetime import datetime
 from pathlib import Path
 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
 
 
@@ -86,6 +86,13 @@ class CardImageResponse(BaseModel):
                 raise ValueError("Invalid JSON string in database")
         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):
     """用于响应单个卡牌详细信息的模型 (主键为 id)"""
@@ -108,6 +115,13 @@ class CardDetailResponse(BaseModel):
     class Config:
         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):
     id: int
@@ -159,6 +173,13 @@ class CardListDetailResponse(BaseModel):
     class Config:
         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):
     total: int