Kaynağa Gözat

cardNo 重复异常

AnlaAnla 2 hafta önce
ebeveyn
işleme
bffcc18933
2 değiştirilmiş dosya ile 46 ekleme ve 26 silme
  1. 39 22
      Test/minio测试.py
  2. 7 4
      app/api/rating_report.py

+ 39 - 22
Test/minio测试.py

@@ -2,35 +2,52 @@ from minio import Minio
 import os
 
 
-client = Minio(
-    "192.168.77.249:9000",
-    access_key="pZEwCGnpNN05KPnmC2Yh",
-    secret_key="KfJRuWiv9pVxhIMcFqbkv8hZT9SnNTZ6LPx592D4",
-    secure=False
-)
-
 MINIO_ENDPOINT = "192.168.77.249:9000"
+MINIO_ACCESS_KEY = "pZEwCGnpNN05KPnmC2Yh"
+MINIO_SECRET_KEY = "KfJRuWiv9pVxhIMcFqbkv8hZT9SnNTZ6LPx592D4"  # 替换为你的 Secret Key
+MINIO_SECURE = False  # 是否使用 https
 MINIO_BUCKET = "grading"
 MINIO_BASE_PREFIX = "raspi_img_data"
 
 DATA_HOST_URL = f"http://{MINIO_ENDPOINT}/{MINIO_BUCKET}/{MINIO_BASE_PREFIX}"
 
 
-# try:
-#     # 2. 检查存储桶是否存在
-#     found = client.bucket_exists(bucket_name)
-#     if not found:
-#         client.make_bucket(bucket_name)
-#         print(f"存储桶 {bucket_name} 已创建")
-#     else:
-#         print(f"存储桶 {bucket_name} 已存在")
-#
-#     cloud_path = os.path.join(data_dir, object_name).replace("\\", "/")
-#
-#     client.fput_object(bucket_name, cloud_path, img_path, content_type="image/jpeg")
-#     print(f"成功上传 {object_name} 到 {bucket_name}")
+minio_client = Minio(
+    MINIO_ENDPOINT,
+    access_key=MINIO_ACCESS_KEY,
+    secret_key=MINIO_SECRET_KEY,
+    secure=MINIO_SECURE
+)
+
+
+def get_full_url(path: str) -> str:
+    """将相对路径转换为可以直接打开的 MinIO 绝对 URL"""
+    if not path:
+        return path
+    if str(path).startswith("http"):
+        return path
+    # 移除开头的斜杠防止双斜杠 (如: /Data/xxx -> Data/xxx)
+    clean_path = str(path).lstrip("/\\")
+    return f"{DATA_HOST_URL}/{clean_path}"
+
+print(get_full_url("rsp_test.jpg"))
+
+try:
+    # 2. 检查存储桶是否存在
+    found = minio_client.bucket_exists(MINIO_BUCKET)
+    if not found:
+        minio_client.make_bucket(MINIO_BUCKET)
+        print(f"存储桶 {MINIO_BUCKET} 已创建")
+    else:
+        print(f"存储桶 {MINIO_BUCKET} 已存在")
+
+    object_name = "img_test.jpg"
+    cloud_path = os.path.join(MINIO_BASE_PREFIX, object_name).replace("\\", "/")
+
+    minio_client.fput_object(MINIO_BUCKET, cloud_path, img_path, content_type="image/jpeg")
+    print(f"成功上传 {object_name} 到 {MINIO_BUCKET}")
 
 
 
-# except Exception as e:
-#     print(f"发生错误: {e}")
+except Exception as e:
+    print(f"发生错误: {e}")

+ 7 - 4
app/api/rating_report.py

@@ -102,16 +102,19 @@ def generate_rating_report(
 
     # 根据cardNo 查询id
     try:
-        with db_conn.cursor() as cursor:
-            query_sql = f"SELECT id, cardNo FROM {settings.DB_CARD_TABLE_NAME} WHERE cardNo = %s"
+        with db_conn.cursor(buffered=True) as cursor:
+            query_sql = f"SELECT id FROM {settings.DB_CARD_TABLE_NAME} WHERE cardNo = %s LIMIT 1"
             cursor.execute(query_sql, (cardNo,))
-            card_id = cursor.fetchone()[0]
+            row = cursor.fetchone()
 
-        if not card_id:
+        if not row:
             raise HTTPException(
                 status_code=404,
                 detail=f"未找到卡号为 {cardNo} 的相关记录"
             )
+
+        card_id = row[0]
+
     except Exception as e:
         logger.error(f"创建卡牌失败: {e}")
         raise HTTPException(status_code=500, detail="数据库查询失败。")