Эх сурвалжийг харах

增加依赖环境包、返回结果中更改序列类型

drggboy 1 сар өмнө
parent
commit
6ec6d60142

+ 3 - 1
app/models/vector.py

@@ -1,6 +1,6 @@
 # 矢量数据模型
-
 from sqlalchemy import Column, Integer, String, JSON, Table, MetaData
+from geoalchemy2 import Geometry
 from .base import Base
 from ..database import engine
 
@@ -9,8 +9,10 @@ metadata = MetaData()
 surveydata = Table(
     "surveydata",
     metadata,
+    schema="public",
     autoload_with=engine
 )
 
+# 定义矢量数据模型
 class VectorData(Base):
     __table__ = surveydata

+ 36 - 2
app/services/vector_service.py

@@ -22,14 +22,48 @@ def get_vector_data(db: Session, vector_id: int):
     vector_data = db.query(VectorData).filter(VectorData.id == vector_id).first()
     if not vector_data:
         raise HTTPException(status_code=404, detail="矢量数据不存在")
-    return vector_data
+    
+    # 手动构建返回字典
+    result = {}
+    for column in vector_data.__table__.columns:
+        value = getattr(vector_data, column.name)
+        # 处理特殊类型
+        if isinstance(value, Decimal):
+            value = float(value)
+        elif isinstance(value, datetime):
+            value = value.isoformat()
+        elif str(column.type).startswith('geometry'):
+            # 如果是几何类型,直接使用字符串表示
+            if value is not None:
+                value = str(value)
+        result[column.name] = value
+    
+    return result
 
 def get_vector_data_batch(db: Session, vector_ids: List[int]):
     """批量获取矢量数据记录"""
     vector_data_list = db.query(VectorData).filter(VectorData.id.in_(vector_ids)).all()
     if not vector_data_list:
         raise HTTPException(status_code=404, detail="未找到指定的矢量数据")
-    return vector_data_list
+    
+    result = []
+    for vector_data in vector_data_list:
+        item = {}
+        for column in vector_data.__table__.columns:
+            value = getattr(vector_data, column.name)
+            # 处理特殊类型
+            if isinstance(value, Decimal):
+                value = float(value)
+            elif isinstance(value, datetime):
+                value = value.isoformat()
+            elif str(column.type).startswith('geometry'):
+                # 如果是几何类型,直接使用字符串表示
+                if value is not None:
+                    value = str(value)
+            item[column.name] = value
+        result.append(item)
+    
+    return result
 
 async def import_vector_data(file: UploadFile, db: Session) -> dict:
     """导入GeoJSON文件到数据库"""

BIN
environment.yml