From 0082bd71ee3736dd6e9fe947e2b17315f9ccaa8a Mon Sep 17 00:00:00 2001 From: junjun Date: Thu, 7 Aug 2025 17:09:37 +0800 Subject: [PATCH 1/3] fix: field order --- backend/apps/datasource/crud/field.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/backend/apps/datasource/crud/field.py b/backend/apps/datasource/crud/field.py index 53321575..2b478ff5 100644 --- a/backend/apps/datasource/crud/field.py +++ b/backend/apps/datasource/crud/field.py @@ -1,6 +1,5 @@ from common.core.deps import SessionDep -from ..models.datasource import CoreDatasource, CreateDatasource, CoreTable, CoreField, ColumnSchema -from sqlalchemy import and_ +from ..models.datasource import CoreField def delete_field_by_ds_id(session: SessionDep, id: int): @@ -9,8 +8,7 @@ def delete_field_by_ds_id(session: SessionDep, id: int): def get_fields_by_table_id(session: SessionDep, id: int): - return session.query(CoreField).filter(CoreField.table_id == id).order_by( - CoreField.field_name.asc()).all() + return session.query(CoreField).filter(CoreField.table_id == id).all() def update_field(session: SessionDep, item: CoreField): From b7c2b0bc93cbedd58185c0aa996cae4610419994 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Thu, 7 Aug 2025 17:39:54 +0800 Subject: [PATCH 2/3] perf: Assistant cors config --- backend/apps/system/api/assistant.py | 3 ++- backend/common/utils/utils.py | 23 +++++++++++++++++++++++ backend/pyproject.toml | 2 +- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/backend/apps/system/api/assistant.py b/backend/apps/system/api/assistant.py index fe9303e5..89b9c660 100644 --- a/backend/apps/system/api/assistant.py +++ b/backend/apps/system/api/assistant.py @@ -12,6 +12,7 @@ from common.core.sqlbot_cache import clear_cache from common.utils.time import get_timestamp from starlette.middleware.cors import CORSMiddleware from common.core.config import settings +from common.utils.utils import get_origin_from_referer router = APIRouter(tags=["system/assistant"], prefix="/system/assistant") @router.get("/info/{id}") @@ -23,7 +24,7 @@ async def info(request: Request, response: Response, session: SessionDep, trans: raise RuntimeError(f"assistant application not exist") db_model = AssistantModel.model_validate(db_model) response.headers["Access-Control-Allow-Origin"] = db_model.domain - origin = request.headers.get("origin") or request.headers.get("referer") + origin = request.headers.get("origin") or get_origin_from_referer(request) origin = origin.rstrip('/') if origin != db_model.domain: raise RuntimeError(trans('i18n_embedded.invalid_origin', origin = origin or '')) diff --git a/backend/common/utils/utils.py b/backend/common/utils/utils.py index 9e14f652..cea2a95e 100644 --- a/backend/common/utils/utils.py +++ b/backend/common/utils/utils.py @@ -6,6 +6,9 @@ import logging from datetime import datetime, timedelta, timezone from logging.handlers import RotatingFileHandler from pathlib import Path +from urllib.parse import urlparse + +from fastapi import Request from common.core.config import settings from typing import Optional @@ -240,4 +243,24 @@ def prepare_model_arg(origin_arg: str): return json.loads(origin_arg) except: return origin_arg + +def get_origin_from_referer(request: Request): + referer = request.headers.get("referer") + if not referer: + return None + + try: + parsed = urlparse(referer) + if not parsed.scheme or not parsed.hostname: + return None + port = parsed.port + if port: + if (parsed.scheme == "http" and port != 80) or \ + (parsed.scheme == "https" and port != 443): + return f"{parsed.scheme}://{parsed.hostname}:{port}" + + return f"{parsed.scheme}://{parsed.hostname}" + except Exception as e: + SQLBotLogUtil.error(f"解析 Referer 出错: {e}") + return referer diff --git a/backend/pyproject.toml b/backend/pyproject.toml index d9397f39..53680a0b 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "sqlbot" -version = "0.1.0" +version = "1.0.0" description = "" requires-python = ">=3.10,<3.13" dependencies = [ From 504ce9af32aea4280e76fc67b45436786046e0e1 Mon Sep 17 00:00:00 2001 From: junjun Date: Thu, 7 Aug 2025 17:47:56 +0800 Subject: [PATCH 3/3] refactor: ignore empty column --- backend/apps/datasource/api/datasource.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/apps/datasource/api/datasource.py b/backend/apps/datasource/api/datasource.py index 52cfb97d..f89b052b 100644 --- a/backend/apps/datasource/api/datasource.py +++ b/backend/apps/datasource/api/datasource.py @@ -273,7 +273,9 @@ async def upload_excel(session: SessionDep, file: UploadFile = File(...)): for sheet_name in sheet_names: tableName = f"{sheet_name}_{hashlib.sha256(uuid.uuid4().bytes).hexdigest()[:10]}" sheets.append({"tableName": tableName, "tableComment": ""}) - df = pd.read_excel(save_path, sheet_name=sheet_name, engine='calamine') + df_temp = pd.read_excel(path, nrows=5) + non_empty_cols = df_temp.columns[df_temp.notna().any()].tolist() + df = pd.read_excel(save_path, sheet_name=sheet_name, engine='calamine', usecols=non_empty_cols) insert_pg(df, tableName, engine) # os.remove(save_path)