mirror of
https://github.com/csunny/DB-GPT.git
synced 2025-09-06 03:20:41 +00:00
refactor: Refactor storage and new serve template (#947)
This commit is contained in:
@@ -10,7 +10,6 @@ from dbgpt._private.config import Config
|
||||
from dbgpt.component import SystemApp
|
||||
from dbgpt.util.parameter_utils import BaseParameters
|
||||
|
||||
from dbgpt.util._db_migration_utils import _ddl_init_and_upgrade
|
||||
|
||||
ROOT_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
sys.path.append(ROOT_PATH)
|
||||
@@ -92,10 +91,27 @@ def _initialize_db_storage(param: "WebServerParameters"):
|
||||
|
||||
Now just support sqlite and mysql. If db type is sqlite, the db path is `pilot/meta_data/{db_name}.db`.
|
||||
"""
|
||||
default_meta_data_path = _initialize_db(
|
||||
try_to_create_db=not param.disable_alembic_upgrade
|
||||
)
|
||||
_ddl_init_and_upgrade(default_meta_data_path, param.disable_alembic_upgrade)
|
||||
_initialize_db(try_to_create_db=not param.disable_alembic_upgrade)
|
||||
|
||||
|
||||
def _migration_db_storage(param: "WebServerParameters"):
|
||||
"""Migration the db storage."""
|
||||
# Import all models to make sure they are registered with SQLAlchemy.
|
||||
from dbgpt.app.initialization.db_model_initialization import _MODELS
|
||||
|
||||
from dbgpt.configs.model_config import PILOT_PATH
|
||||
|
||||
default_meta_data_path = os.path.join(PILOT_PATH, "meta_data")
|
||||
if not param.disable_alembic_upgrade:
|
||||
from dbgpt.util._db_migration_utils import _ddl_init_and_upgrade
|
||||
from dbgpt.storage.metadata.db_manager import db
|
||||
|
||||
# try to create all tables
|
||||
try:
|
||||
db.create_all()
|
||||
except Exception as e:
|
||||
logger.warning(f"Create all tables stored in this metadata error: {str(e)}")
|
||||
_ddl_init_and_upgrade(default_meta_data_path, param.disable_alembic_upgrade)
|
||||
|
||||
|
||||
def _initialize_db(try_to_create_db: Optional[bool] = False) -> str:
|
||||
@@ -112,7 +128,13 @@ def _initialize_db(try_to_create_db: Optional[bool] = False) -> str:
|
||||
default_meta_data_path = os.path.join(PILOT_PATH, "meta_data")
|
||||
os.makedirs(default_meta_data_path, exist_ok=True)
|
||||
if CFG.LOCAL_DB_TYPE == "mysql":
|
||||
db_url = f"mysql+pymysql://{quote(CFG.LOCAL_DB_USER)}:{urlquote(CFG.LOCAL_DB_PASSWORD)}@{CFG.LOCAL_DB_HOST}:{str(CFG.LOCAL_DB_PORT)}/{db_name}"
|
||||
db_url = (
|
||||
f"mysql+pymysql://{quote(CFG.LOCAL_DB_USER)}:"
|
||||
f"{urlquote(CFG.LOCAL_DB_PASSWORD)}@"
|
||||
f"{CFG.LOCAL_DB_HOST}:"
|
||||
f"{str(CFG.LOCAL_DB_PORT)}/"
|
||||
f"{db_name}?charset=utf8mb4&collation=utf8mb4_unicode_ci"
|
||||
)
|
||||
# Try to create database, if failed, will raise exception
|
||||
_create_mysql_database(db_name, db_url, try_to_create_db)
|
||||
else:
|
||||
@@ -125,7 +147,7 @@ def _initialize_db(try_to_create_db: Optional[bool] = False) -> str:
|
||||
"pool_recycle": 3600,
|
||||
"pool_pre_ping": True,
|
||||
}
|
||||
initialize_db(db_url, db_name, engine_args, try_to_create_db=try_to_create_db)
|
||||
initialize_db(db_url, db_name, engine_args)
|
||||
return default_meta_data_path
|
||||
|
||||
|
||||
@@ -161,7 +183,11 @@ def _create_mysql_database(db_name: str, db_url: str, try_to_create_db: bool = F
|
||||
no_db_name_url = db_url.rsplit("/", 1)[0]
|
||||
engine_no_db = create_engine(no_db_name_url)
|
||||
with engine_no_db.connect() as conn:
|
||||
conn.execute(DDL(f"CREATE DATABASE {db_name}"))
|
||||
conn.execute(
|
||||
DDL(
|
||||
f"CREATE DATABASE {db_name} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
|
||||
)
|
||||
)
|
||||
logger.info(f"Database {db_name} successfully created")
|
||||
except SQLAlchemyError as e:
|
||||
logger.error(f"Failed to create database {db_name}: {e}")
|
||||
|
Reference in New Issue
Block a user