Skip to content

Commit c41c760

Browse files
committed
feat: get fields api
1 parent 1960fce commit c41c760

File tree

6 files changed

+52
-9
lines changed

6 files changed

+52
-9
lines changed

backend/apps/datasource/api/datasource.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from fastapi import APIRouter
2-
from ..crud.datasource import get_datasource_list, check_status, create_ds, update_ds, delete_ds, getTables
2+
from ..crud.datasource import get_datasource_list, check_status, create_ds, update_ds, delete_ds, getTables, getFields
33
from common.core.deps import SessionDep
44
from ..models.datasource import CoreDatasource
55

@@ -34,3 +34,8 @@ async def delete(session: SessionDep, id: int):
3434
@router.post("/getTables/{id}")
3535
async def get_tables(session: SessionDep, id: int):
3636
return getTables(session, id)
37+
38+
39+
@router.post("/getFields/{id}/{table_name}")
40+
async def get_tables(session: SessionDep, id: int, table_name: str):
41+
return getFields(session, id, table_name)

backend/apps/datasource/crud/datasource.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from common.core.deps import SessionDep
55
import json
66
from ..utils.utils import aes_decrypt
7-
from apps.db.db import get_session, get_tables
7+
from apps.db.db import get_session, get_tables, get_fields
88
from sqlalchemy import text
99

1010

@@ -62,3 +62,10 @@ def getTables(session: SessionDep, id: int):
6262
conf = DatasourceConf(**json.loads(aes_decrypt(ds.configuration)))
6363
tables = get_tables(conf, ds)
6464
return tables
65+
66+
67+
def getFields(session: SessionDep, id: int, table_name: str):
68+
ds = session.exec(select(CoreDatasource).where(CoreDatasource.id == id)).first()
69+
conf = DatasourceConf(**json.loads(aes_decrypt(ds.configuration)))
70+
fields = get_fields(conf, ds, table_name)
71+
return fields

backend/apps/datasource/models/datasource.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,14 @@ def __init__(self, attr1, attr2):
3232

3333
tableName: str
3434
tableRemark: str
35+
36+
37+
class ColumnSchema:
38+
def __init__(self, attr1, attr2, attr3):
39+
self.fieldName = attr1
40+
self.fieldType = attr2
41+
self.fieldRemark = attr3
42+
43+
fieldName: str
44+
fieldType: str
45+
fieldRemark: str

backend/apps/db/db.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from sqlalchemy import create_engine, text, Result
22
from sqlalchemy.orm import sessionmaker
3-
from apps.datasource.models.datasource import DatasourceConf, CoreDatasource, TableSchema
3+
from apps.datasource.models.datasource import DatasourceConf, CoreDatasource, TableSchema, ColumnSchema
44
import urllib.parse
55
from typing import Any
66

@@ -22,8 +22,8 @@ def get_tables(conf: DatasourceConf, ds: CoreDatasource):
2222
result: Result[Any]
2323
if ds.type == "mysql":
2424
sql = f"""SELECT
25-
TABLE_NAME AS `Table Name`,
26-
TABLE_COMMENT AS `Table Comment`
25+
TABLE_NAME,
26+
TABLE_COMMENT
2727
FROM
2828
information_schema.TABLES
2929
WHERE
@@ -35,7 +35,21 @@ def get_tables(conf: DatasourceConf, ds: CoreDatasource):
3535
return res_list
3636

3737

38-
def get_fields(conf: DatasourceConf, ds: CoreDatasource):
38+
def get_fields(conf: DatasourceConf, ds: CoreDatasource, table_name: str):
3939
session = get_session(conf, ds)
4040
result: Result[Any]
41-
pass
41+
if ds.type == "mysql":
42+
sql = f"""SELECT
43+
COLUMN_NAME,
44+
DATA_TYPE,
45+
COLUMN_COMMENT
46+
FROM
47+
INFORMATION_SCHEMA.COLUMNS
48+
WHERE
49+
TABLE_SCHEMA = '{conf.database}' AND
50+
TABLE_NAME = '{table_name}';"""
51+
result = session.execute(text(sql))
52+
53+
res = result.fetchall()
54+
res_list = [ColumnSchema(*item) for item in res]
55+
return res_list

frontend/src/api/datasource.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ export const datasourceApi = {
77
update: (data: any) => request.post('/datasource/update', data),
88
delete: (id: Number) => request.post(`/datasource/delete/${id}`),
99
getTables: (id: Number) => request.post(`/datasource/getTables/${id}`),
10+
getFields: (id: Number, table_name: string) => request.post(`/datasource/getFields/${id}/${table_name}`),
1011
}

frontend/src/views/ds/index.vue

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
</div>
3636
<div class="connection-status" :class="`${getStatus(ds.status)}`">{{ ds.status }}</div>
3737
<div class="connection-actions">
38-
<el-button class="action-btn" circle @click="getTables(ds.id)"/>
38+
<el-button class="action-btn" @click="getTables(ds.id)">Info</el-button>
3939
<el-button type="primary" class="action-btn" circle @click="editDs(ds)" :icon="IconOpeEdit"/>
4040
<el-button type="danger" class="action-btn" circle @click="deleteDs(ds)" :icon="IconOpeDelete"/>
4141
</div>
@@ -116,7 +116,11 @@ const deleteDs = (item: any) => {
116116
}
117117
118118
const getTables = (id: Number) => {
119-
datasourceApi.getTables(id).then((res) => {
119+
// datasourceApi.getTables(id).then((res) => {
120+
// console.log(res)
121+
// })
122+
123+
datasourceApi.getFields(id,'core_dataset_table').then((res) => {
120124
console.log(res)
121125
})
122126
}
@@ -233,6 +237,7 @@ onMounted(() => {
233237
right: 20px;
234238
display: flex;
235239
.action-btn {
240+
display: none;
236241
}
237242
}
238243
:hover .action-btn{

0 commit comments

Comments
 (0)