Browse Source

拍照记录结构调整以及添加动作报错问题解决

rambo 7 months ago
parent
commit
91884d94cb
3 changed files with 36 additions and 2 deletions
  1. 20 1
      python/api.py
  2. 15 0
      python/databases.py
  3. 1 1
      python/models.py

+ 20 - 1
python/api.py

@@ -508,8 +508,27 @@ def get_photo_records(page: int = 1, size: int = 5):
     list = []
     result = session.exec(statement).all()
     print("group 完成 ", datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
+    join_conditions = [
+        {
+            "model": DeviceConfig,
+            "on": PhotoRecord.action_id == DeviceConfig.id,
+            "is_outer": False,  # 可选,默认False,设为True则为LEFT JOIN
+        }
+    ]
     for item in result:
-        list_item = photos.read_all(session, conditions={"goods_art_no": item.goods_art_no})
+        print(item)
+        # list_item = photos.read_all(
+        #     session,
+        #     conditions={"goods_art_no": item.goods_art_no},
+        #     join_conditions=join_conditions,
+        # )
+        query = (
+            select(PhotoRecord, DeviceConfig.action_name)
+            .where(PhotoRecord.goods_art_no == item.goods_art_no)
+            .join(DeviceConfig, PhotoRecord.action_id == DeviceConfig.id)
+        )
+        list_item = session.exec(query).mappings().all()
+        session.close()
         list.append(
             {
                 "goods_art_no": item.goods_art_no,

+ 15 - 0
python/databases.py

@@ -130,8 +130,23 @@ class CRUD:
         conditions: Optional[Dict] = None,
         order_by: Optional[str] = None,
         ascending: bool = True,
+        join_conditions: Optional[list] = None,  # 新增:支持多个JOIN
     ):
         query = select(self.model)
+        # 处理JOIN逻辑
+        if join_conditions:
+            for join_info in join_conditions:
+                joined_model = join_info.get("model")
+                on_clause = join_info.get("on")
+                is_outer = join_info.get("is_outer", False)
+
+                if not joined_model or not on_clause:
+                    continue
+
+                if is_outer:
+                    query = query.outerjoin(joined_model, on_clause)
+                else:
+                    query = query.join(joined_model, on_clause)
         if conditions:
             for key, value in conditions.items():
                 column = getattr(self.model, key)

+ 1 - 1
python/models.py

@@ -34,7 +34,7 @@ class SaveDeviceConfig(BaseModel):
     """获取可执行程序命令列表"""
 
     id: Optional[int] = Field(default=None, primary_key=True)
-    tab_id: Optional[int] = Field(default=0, index=True, max_length=128)
+    tab_id: Optional[int] = Field(default=0, index=True)
     action_name: Optional[str] = Field(default="", index=True, max_length=128)
     action_index: Optional[int] = Field(default=None)
     action_status: Optional[bool] = Field(default=None)