feat(datasource): provide checked tables and fields

This commit is contained in:
junjun
2025-05-23 16:39:29 +08:00
parent 689d7adac7
commit 83d94eedaa
4 changed files with 29 additions and 10 deletions
+3 -3
View File
@@ -12,7 +12,7 @@ from ..crud.datasource import get_datasource_list, check_status, create_ds, upda
execSql, update_table_and_fields, getTablesByDs, chooseTables, preview
from ..crud.field import get_fields_by_table_id
from ..crud.table import get_tables_by_ds_id
from ..models.datasource import CoreDatasource, CreateDatasource, EditObj, CoreTable
from ..models.datasource import CoreDatasource, CreateDatasource, TableObj, CoreTable
router = APIRouter(tags=["datasource"], prefix="/datasource")
path = "/opt/sqlbot/data/excel"
@@ -79,12 +79,12 @@ async def field_list(session: SessionDep, id: int):
@router.post("/editLocalComment")
async def edit_local(session: SessionDep, data: EditObj):
async def edit_local(session: SessionDep, data: TableObj):
update_table_and_fields(session, data)
@router.post("/previewData/{id}")
async def edit_local(session: SessionDep, id: int, data: EditObj):
async def edit_local(session: SessionDep, id: int, data: TableObj):
return preview(session, id, data)
+14 -5
View File
@@ -9,13 +9,13 @@ from apps.datasource.utils.utils import aes_decrypt
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.type import db_type_relation
from common.core.deps import SessionDep, CurrentUser
from common.utils.utils import deepcopy_ignore_extra
from ..crud.field import delete_field_by_ds_id, update_field
from ..crud.table import delete_table_by_ds_id, update_table
from ..models.datasource import CoreDatasource, CreateDatasource, CoreTable, CoreField, ColumnSchema, EditObj, \
DatasourceConf
from apps.db.type import db_type_relation
from ..models.datasource import CoreDatasource, CreateDatasource, CoreTable, CoreField, ColumnSchema, TableObj, \
DatasourceConf, TableAndFields
def get_datasource_list(session: SessionDep):
@@ -186,13 +186,13 @@ def sync_fields(session: SessionDep, ds: CoreDatasource, table: CoreTable, field
session.commit()
def update_table_and_fields(session: SessionDep, data: EditObj):
def update_table_and_fields(session: SessionDep, data: TableObj):
update_table(session, data.table)
for field in data.fields:
update_field(session, field)
def preview(session: SessionDep, id: int, data: EditObj):
def preview(session: SessionDep, id: int, data: TableObj):
ds = session.query(CoreDatasource).filter(CoreDatasource.id == id).first()
conf = DatasourceConf(**json.loads(aes_decrypt(ds.configuration))) if ds.type != "excel" else get_engine_config()
sql: str = ""
@@ -209,3 +209,12 @@ def preview(session: SessionDep, id: int, data: EditObj):
ORDER BY "{data.fields[0].field_name}"
OFFSET 0 ROWS FETCH NEXT 100 ROWS ONLY"""
return exec_sql(ds, sql)
def get_tableobj_by_ds(session: SessionDep, id: int) -> List[TableAndFields]:
list: List = []
tables = session.query(CoreTable).filter(CoreTable.ds_id == id).all()
for table in tables:
fields = session.query(CoreField).filter(and_(CoreField.table_id == table.id, CoreField.checked == True)).all()
list.append(TableAndFields(table=table, fields=fields))
return list
+2 -1
View File
@@ -9,7 +9,8 @@ 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).all()
return session.query(CoreField).filter(CoreField.table_id == id).order_by(
CoreField.field_name.asc()).all()
def update_field(session: SessionDep, item: CoreField):
+10 -1
View File
@@ -55,7 +55,7 @@ class CreateDatasource(BaseModel):
# edit local saved table and fields
class EditObj(BaseModel):
class TableObj(BaseModel):
table: CoreTable = None
fields: List[CoreField] = []
@@ -108,3 +108,12 @@ class ColumnSchema:
fieldName: str
fieldType: str
fieldComment: str
class TableAndFields:
def __init__(self, table, fields):
self.table = table
self.fields = fields
table: CoreTable
fields: List[CoreField]