Bladeren bron

修复数据库更新后,预测接口及展示表格接口无法使用的bug

DIng 2 maanden geleden
bovenliggende
commit
c321943b46

+ 1 - 0
.idea/AcidificationModel.iml

@@ -2,6 +2,7 @@
 <module type="PYTHON_MODULE" version="4">
   <component name="NewModuleRootManager">
     <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/api" isTestSource="false" />
       <excludeFolder url="file://$MODULE_DIR$/.venv" />
     </content>
     <orderEntry type="jdk" jdkName="Python 3.8" jdkType="Python SDK" />

+ 1 - 1
api/app/celery_app.py

@@ -2,7 +2,7 @@
 Celery配置文件
 """
 from celery import Celery
-from api.app.config import Config
+from app.config import Config
 
 # 创建Celery实例
 celery = Celery('app',

+ 6 - 2
api/app/database_models.py

@@ -1,8 +1,9 @@
+import datetime
 from typing import List, Optional
 
-from sqlalchemy import Column, Float, ForeignKey, Integer, String, TIMESTAMP, Table, Text, text
+from sqlalchemy import Float, ForeignKey, Integer, TIMESTAMP, Text, text
 from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship
-import datetime
+
 
 class Base(DeclarativeBase):
     pass
@@ -32,6 +33,9 @@ class Models(Base):
     ModelFilePath: Mapped[Optional[str]] = mapped_column(Text)
     Data_type: Mapped[Optional[str]] = mapped_column(Text)
     Performance_score: Mapped[Optional[float]] = mapped_column(Text)
+    MAE: Mapped[Optional[float]] = mapped_column(Text)
+    RMSE: Mapped[Optional[float]] = mapped_column(Text)
+    CV_score: Mapped[Optional[float]] = mapped_column(Text)
 
     ModelParameters: Mapped[List['ModelParameters']] = relationship('ModelParameters', back_populates='Models_')
 

+ 0 - 36
api/app/frontend.py

@@ -282,42 +282,6 @@ def sql_search():
         return jsonify({'error': f'缺少必要的数据字段: {e}'}), 400
 
 
-# 定义提供数据库列表,用于展示表格的 API 接口
-@bp.route('/table', methods=['POST'])
-def get_table():
-    data = request.get_json()
-    table_name = data.get('table')
-    if not table_name:
-        return jsonify({'error': '需要表名'}), 400
-
-    try:
-        # 创建 sessionmaker 实例
-        Session = sessionmaker(bind=db.engine)
-        session = Session()
-
-        # 动态获取表的元数据
-        metadata = MetaData()
-        table = Table(table_name, metadata, autoload_with=db.engine)
-
-        # 从数据库中查询所有记录
-        query = select(table)
-        result = session.execute(query).fetchall()
-
-        # 将结果转换为列表字典形式
-        rows = [dict(zip([column.name for column in table.columns], row)) for row in result]
-
-        # 获取列名
-        headers = [column.name for column in table.columns]
-
-        return jsonify(rows=rows, headers=headers), 200
-
-    except Exception as e:
-        return jsonify({'error': str(e)}), 400
-    finally:
-        # 关闭 session
-        session.close()
-
-
 # 更新用户信息接口
 @bp.route('/update_user', methods=['POST'])
 def update_user():

+ 38 - 1
api/app/routes.py

@@ -14,7 +14,7 @@ from .utils import create_dynamic_table, allowed_file, infer_column_types, renam
     predict_to_Q, Q_to_t_ha, create_kriging
 from sqlalchemy.orm import sessionmaker
 import logging
-from sqlalchemy import text, func
+from sqlalchemy import text, func, MetaData, Table, select
 from .tasks import train_model_task
 from datetime import datetime
 
@@ -376,6 +376,8 @@ def get_model(model_id):
                 'Created_at': model.Created_at.strftime('%Y-%m-%d %H:%M:%S'),
                 'Description': model.Description,
                 'Performance_score': float(model.Performance_score) if model.Performance_score else None,
+                'MAE': float(model.MAE) if model.MAE else None,
+                'RMSE': float(model.RMSE) if model.RMSE else None,
                 'Data_type': model.Data_type
             })
         else:
@@ -1038,3 +1040,38 @@ def get_models():
         if session:
             session.close()
 
+
+# 定义提供数据库列表,用于展示表格的 API 接口
+@bp.route('/table', methods=['POST'])
+def get_table():
+    data = request.get_json()
+    table_name = data.get('table')
+    if not table_name:
+        return jsonify({'error': '需要表名'}), 400
+
+    try:
+        # 创建 sessionmaker 实例
+        Session = sessionmaker(bind=db.engine)
+        session = Session()
+
+        # 动态获取表的元数据
+        metadata = MetaData()
+        table = Table(table_name, metadata, autoload_with=db.engine)
+
+        # 从数据库中查询所有记录
+        query = select(table)
+        result = session.execute(query).fetchall()
+
+        # 将结果转换为列表字典形式
+        rows = [dict(zip([column.name for column in table.columns], row)) for row in result]
+
+        # 获取列名
+        headers = [column.name for column in table.columns]
+
+        return jsonify(rows=rows, headers=headers), 200
+
+    except Exception as e:
+        return jsonify({'error': str(e)}), 400
+    finally:
+        # 关闭 session
+        session.close()

+ 1 - 1
api/app/tasks.py

@@ -2,7 +2,7 @@
 Celery任务定义文件
 """
 from celery import current_task
-from api.app.celery_app import celery
+from app.celery_app import celery
 import time
 from .database_models import Models, Datasets
 from .model import train_and_save_model, calculate_model_score

BIN
api/pkl/rf_model_0308_1550.pkl


BIN
api/pkl/rf_model_0308_1619.pkl


BIN
api/pkl/rf_model_0308_1632.pkl


+ 1 - 1
shoping/Calculation/Calculation.js

@@ -72,7 +72,7 @@ Page({
   calculate: function() {
     console.log('开始计算...');
     const data = {
-      model_id: 9,
+      model_id: 24,
       parameters: {
         organic_matter: this.data.OM,
         chloride: this.data.CL,