diff --git a/backend/apps/datasource/api/datasource.py b/backend/apps/datasource/api/datasource.py
index 5cda29b7..afd7595d 100644
--- a/backend/apps/datasource/api/datasource.py
+++ b/backend/apps/datasource/api/datasource.py
@@ -1,4 +1,4 @@
-from fastapi import APIRouter
+from fastapi import APIRouter, File, UploadFile
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
from common.core.deps import SessionDep
@@ -78,3 +78,9 @@ async def edit_local(session: SessionDep, data: EditObj):
@router.post("/previewData/{id}")
async def edit_local(session: SessionDep, id: int, data: EditObj):
return preview(session, id, data)
+
+
+@router.post("/uploadExcel/")
+async def upload_excel(session: SessionDep, file: UploadFile = File(...)):
+ # todo
+ pass
diff --git a/backend/apps/datasource/models/datasource.py b/backend/apps/datasource/models/datasource.py
index a571a3ec..18352d97 100644
--- a/backend/apps/datasource/models/datasource.py
+++ b/backend/apps/datasource/models/datasource.py
@@ -66,6 +66,7 @@ class DatasourceConf(BaseModel):
password: str = ''
database: str = ''
driver: str = ''
+ extraJdbc: str = ''
class TableSchema:
diff --git a/backend/apps/db/db.py b/backend/apps/db/db.py
index 4fdb52a6..24d4ca38 100644
--- a/backend/apps/db/db.py
+++ b/backend/apps/db/db.py
@@ -1,31 +1,29 @@
-from sqlalchemy import create_engine, text, Result
-from sqlalchemy.orm import sessionmaker
-from apps.datasource.models.datasource import DatasourceConf, CoreDatasource, TableSchema, ColumnSchema
+import json
import urllib.parse
from typing import Any
-import json
+
+from sqlalchemy import create_engine, text, Result
+from sqlalchemy.orm import sessionmaker
+
+from apps.datasource.models.datasource import DatasourceConf, CoreDatasource, TableSchema, ColumnSchema
from apps.datasource.utils.utils import aes_decrypt
-from common.core.deps import SessionDep
def get_uri(ds: CoreDatasource):
conf = DatasourceConf(**json.loads(aes_decrypt(ds.configuration)))
db_url: str
if ds.type == "mysql":
- db_url = f"mysql+pymysql://{urllib.parse.quote(conf.username)}:{urllib.parse.quote(conf.password)}@{conf.host}:{conf.port}/{urllib.parse.quote(conf.database)}"
+ if conf.extraJdbc is not None and conf.extraJdbc != '':
+ db_url = f"mysql+pymysql://{urllib.parse.quote(conf.username)}:{urllib.parse.quote(conf.password)}@{conf.host}:{conf.port}/{urllib.parse.quote(conf.database)}?{urllib.parse.quote(conf.extraJdbc)}"
+ else:
+ db_url = f"mysql+pymysql://{urllib.parse.quote(conf.username)}:{urllib.parse.quote(conf.password)}@{conf.host}:{conf.port}/{urllib.parse.quote(conf.database)}"
else:
raise 'The datasource type not support.'
return db_url
def get_session(ds: CoreDatasource):
- conf = DatasourceConf(**json.loads(aes_decrypt(ds.configuration)))
- db_url: str
- if ds.type == "mysql":
- db_url = f"mysql+pymysql://{urllib.parse.quote(conf.username)}:{urllib.parse.quote(conf.password)}@{conf.host}:{conf.port}/{urllib.parse.quote(conf.database)}"
- else:
- raise 'The datasource type not support.'
- engine = create_engine(db_url)
+ engine = create_engine(get_uri(ds))
session_maker = sessionmaker(bind=engine)
session = session_maker()
return session
@@ -100,4 +98,3 @@ def exec_sql(ds: CoreDatasource, sql: str):
result.close()
if session is not None:
session.close()
-
diff --git a/frontend/src/views/ds/form.vue b/frontend/src/views/ds/form.vue
index 05e429f9..d21094b2 100644
--- a/frontend/src/views/ds/form.vue
+++ b/frontend/src/views/ds/form.vue
@@ -44,6 +44,9 @@