diff --git a/backend/apps/datasource/api/datasource.py b/backend/apps/datasource/api/datasource.py index 42b29b89..2b9877f9 100644 --- a/backend/apps/datasource/api/datasource.py +++ b/backend/apps/datasource/api/datasource.py @@ -1,7 +1,7 @@ -from fastapi import APIRouter, HTTPException +from fastapi import APIRouter from ..crud.datasource import get_datasource_list, check_status, create_ds, update_ds, delete_ds from common.core.deps import SessionDep -from ..models.datasource import DatasourceConf, CoreDatasource +from ..models.datasource import CoreDatasource router = APIRouter(tags=["datasource"], prefix="/datasource") diff --git a/backend/apps/datasource/crud/datasource.py b/backend/apps/datasource/crud/datasource.py index 960aee90..85833dfe 100644 --- a/backend/apps/datasource/crud/datasource.py +++ b/backend/apps/datasource/crud/datasource.py @@ -1,11 +1,10 @@ from sqlmodel import select from ..models.datasource import CoreDatasource, DatasourceConf -import pyodbc import datetime from common.core.deps import SessionDep import json from ..utils.utils import aes_decrypt - +from apps.db.db import get_connection def get_datasource_list(session: SessionDep) -> CoreDatasource: statement = select(CoreDatasource).order_by(CoreDatasource.create_time.desc()) @@ -14,26 +13,11 @@ def get_datasource_list(session: SessionDep) -> CoreDatasource: def check_status(session: SessionDep, ds: CoreDatasource): conf = DatasourceConf(**json.loads(aes_decrypt(ds.configuration))) - conn_str = ( - "DRIVER={MySQL ODBC 9.3 Unicode Driver};" # todo driver config - f"SERVER={conf.host};" - f"DATABASE={conf.database};" - f"UID={conf.username};" - f"PWD={conf.password};" - f"PORT={conf.port};" - ) - - conn = None - try: - conn = pyodbc.connect(conn_str) - print("Connect Success") + conn = get_connection(conf) + if conn is not None: return True - except pyodbc.Error as e: - print(f"Connect Fail:{e}") + else: return False - finally: - if conn is not None: - conn.close() def create_ds(session: SessionDep, ds: CoreDatasource): ds.create_time = datetime.datetime.now() diff --git a/backend/apps/db/__init__.py b/backend/apps/db/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/apps/db/db.py b/backend/apps/db/db.py new file mode 100644 index 00000000..d5f84a97 --- /dev/null +++ b/backend/apps/db/db.py @@ -0,0 +1,23 @@ +import pyodbc +from apps.datasource.models.datasource import DatasourceConf + +def get_connection(conf: DatasourceConf): + conn_str = ( + "DRIVER={MySQL ODBC 9.3 Unicode Driver};" # todo driver config + f"SERVER={conf.host};" + f"DATABASE={conf.database};" + f"UID={conf.username};" + f"PWD={conf.password};" + f"PORT={conf.port};" + ) + conn = None + try: + conn = pyodbc.connect(conn_str) + print("Connect Success") + return conn + except pyodbc.Error as e: + print(f"Connect Fail:{e}") + raise e + finally: + if conn is not None: + conn.close()