feat: 实时重载配置文件

This commit is contained in:
2026-05-19 17:20:46 +08:00
parent 59b14b4938
commit db543395ba
9 changed files with 61 additions and 30 deletions
+15 -11
View File
@@ -53,16 +53,20 @@ def _dataframe_from_table(db: DatabaseManager, table_name: str) -> pd.DataFrame:
return pd.DataFrame(result["data"], columns=columns)
def _db() -> DatabaseManager:
return DatabaseManager(state.current_config())
@router.post("/api/database/test")
async def test_database():
db = DatabaseManager(state.config)
db = _db()
success, message = db.test_connection()
return {"success": success, "message": message}
@router.get("/api/database/info")
async def get_database_info():
db = DatabaseManager(state.config)
db = _db()
try:
return {"success": True, **db.get_server_info()}
except Exception as exc:
@@ -72,7 +76,7 @@ async def get_database_info():
@router.get("/api/database/tables")
@router.post("/api/database/tables")
async def get_tables():
db = DatabaseManager(state.config)
db = _db()
try:
return {"tables": db.get_tables()}
except Exception as exc:
@@ -81,7 +85,7 @@ async def get_tables():
@router.post("/api/database/table/info")
async def get_table_info(table_name: str = Body(..., embed=True)):
db = DatabaseManager(state.config)
db = _db()
try:
return db.get_table_info(table_name)
except Exception as exc:
@@ -96,7 +100,7 @@ async def query_table_data(
order_by: Optional[str] = Body(None),
order_dir: str = Body("ASC"),
):
db = DatabaseManager(state.config)
db = _db()
try:
return db.query_table(table_name, page, page_size, order_by=order_by, order_dir=order_dir)
except Exception as exc:
@@ -112,7 +116,7 @@ async def query_table_with_filter(
order_by: Optional[str] = Body(None),
order_dir: str = Body("ASC"),
):
db = DatabaseManager(state.config)
db = _db()
try:
return db.query_table(
table_name,
@@ -128,7 +132,7 @@ async def query_table_with_filter(
@router.post("/api/database/table/truncate")
async def truncate_table(table_name: str = Body(..., embed=True)):
db = DatabaseManager(state.config)
db = _db()
try:
db.truncate_table(table_name)
return {"success": True, "message": f"表 {table_name} 已清空"}
@@ -138,7 +142,7 @@ async def truncate_table(table_name: str = Body(..., embed=True)):
@router.post("/api/database/table/drop")
async def drop_table(table_name: str = Body(..., embed=True)):
db = DatabaseManager(state.config)
db = _db()
try:
db.drop_table(table_name)
return {"success": True, "message": f"表 {table_name} 已删除"}
@@ -148,7 +152,7 @@ async def drop_table(table_name: str = Body(..., embed=True)):
@router.post("/api/database/table/drop-all")
async def drop_all_tables():
db = DatabaseManager(state.config)
db = _db()
try:
result = db.drop_all_tables()
return {
@@ -163,7 +167,7 @@ async def drop_all_tables():
@router.post("/api/database/execute")
async def execute_sql(sql: str = Body(..., embed=True)):
db = DatabaseManager(state.config)
db = _db()
try:
success, result = db.execute_sql(sql)
if success:
@@ -190,7 +194,7 @@ async def download_table(
if file_format == "csv" and len(requested_tables) != 1:
raise HTTPException(status_code=400, detail="CSV 每次只能导出一张表")
db = DatabaseManager(state.config)
db = _db()
try:
available_tables = set(db.get_tables())
missing_tables = [name for name in requested_tables if name not in available_tables]