mirror of
https://gh-proxy.org/https://github.com/klinsmaya/SQLBot.git
synced 2026-11-08 17:26:55 +08:00
feat: field enum
This commit is contained in:
@@ -9,7 +9,7 @@ from fastapi import APIRouter, File, UploadFile, HTTPException
|
||||
from apps.db.engine import create_table, get_data_engine, insert_data
|
||||
from common.core.deps import SessionDep, CurrentUser
|
||||
from ..crud.datasource import get_datasource_list, check_status, create_ds, update_ds, delete_ds, getTables, getFields, \
|
||||
execSql, update_table_and_fields, getTablesByDs, chooseTables, preview, updateTable, updateField, get_ds
|
||||
execSql, update_table_and_fields, getTablesByDs, chooseTables, preview, updateTable, updateField, get_ds, fieldEnum
|
||||
from ..crud.field import get_fields_by_table_id
|
||||
from ..crud.table import get_tables_by_ds_id
|
||||
from ..models.datasource import CoreDatasource, CreateDatasource, TableObj, CoreTable, CoreField
|
||||
@@ -103,6 +103,11 @@ async def edit_local(session: SessionDep, id: int, data: TableObj):
|
||||
return preview(session, id, data)
|
||||
|
||||
|
||||
@router.post("/fieldEnum/{id}")
|
||||
async def field_enum(session: SessionDep, id: int):
|
||||
return fieldEnum(session, id)
|
||||
|
||||
|
||||
@router.post("/uploadExcel")
|
||||
async def upload_excel(session: SessionDep, file: UploadFile = File(...)):
|
||||
ALLOWED_EXTENSIONS = {"xlsx", "xls", "csv"}
|
||||
|
||||
@@ -9,9 +9,9 @@ from sqlbot_xpack.permissions.models.ds_rules import DsRules
|
||||
from sqlmodel import select
|
||||
|
||||
from apps.datasource.utils.utils import aes_decrypt
|
||||
from apps.db.constant import DB
|
||||
from apps.db.db import get_engine, get_tables, get_fields, exec_sql
|
||||
from apps.db.engine import get_engine_config
|
||||
from apps.db.engine import get_engine_conn
|
||||
from apps.db.engine import get_engine_config, get_engine_conn
|
||||
from apps.db.type import db_type_relation
|
||||
from common.core.deps import SessionDep, CurrentUser
|
||||
from common.utils.utils import deepcopy_ignore_extra
|
||||
@@ -245,6 +245,23 @@ def preview(session: SessionDep, id: int, data: TableObj):
|
||||
return exec_sql(ds, sql)
|
||||
|
||||
|
||||
def fieldEnum(session: SessionDep, id: int):
|
||||
field = session.query(CoreField).filter(CoreField.id == id).first()
|
||||
if field is None:
|
||||
return []
|
||||
table = session.query(CoreTable).filter(CoreTable.id == field.table_id).first()
|
||||
if table is None:
|
||||
return []
|
||||
ds = session.query(CoreDatasource).filter(CoreDatasource.id == table.ds_id).first()
|
||||
if ds is None:
|
||||
return []
|
||||
|
||||
db = DB.get_db(ds.type)
|
||||
sql = f"""SELECT DISTINCT {db.prefix}{field.field_name}{db.suffix} FROM {db.prefix}{table.table_name}{db.suffix}"""
|
||||
res = exec_sql(ds, sql)
|
||||
return [item.get(res.get('fields')[0]) for item in res.get('data')]
|
||||
|
||||
|
||||
def updateNum(session: SessionDep, ds: CoreDatasource):
|
||||
all_tables = get_tables(ds)
|
||||
selected_tables = get_tables_by_ds_id(session, ds.id)
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
# Author: Junjun
|
||||
# Date: 2025/7/16
|
||||
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class DB(Enum):
|
||||
mysql = ('mysql', '`', '`')
|
||||
sqlServer = ('sqlServer', '[', ']')
|
||||
pg = ('pg', '"', '"')
|
||||
excel = ('excel', '"', '"')
|
||||
oracle = ('oracle', '"', '"')
|
||||
|
||||
def __init__(self, type, prefix, suffix):
|
||||
self.type = type
|
||||
self.prefix = prefix
|
||||
self.suffix = suffix
|
||||
|
||||
@classmethod
|
||||
def get_db(cls, type):
|
||||
for db in cls:
|
||||
if db.type == type:
|
||||
return db
|
||||
raise ValueError(f"Invalid db type: {type}")
|
||||
Reference in New Issue
Block a user