first commit

This commit is contained in:
2026-03-04 12:17:52 +08:00
commit ecb3e1d9b2
42 changed files with 4081 additions and 0 deletions

122
main.py Normal file
View File

@@ -0,0 +1,122 @@
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse
import uvicorn
import logging
from contextlib import asynccontextmanager
# 导入路由模块
from api.v1.routes.database import router as database_router
from api.v1.routes.tables import router as tables_router
from database_manager import db_manager
from sample_data import SampleDataInitializer
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
# 应用生命周期管理
@asynccontextmanager
async def lifespan(app: FastAPI):
"""应用启动和关闭时的处理"""
# 启动时
logger.info("数据库接口服务启动中...")
# 初始化示例数据
try:
logger.info("开始初始化示例数据...")
sample_initializer = SampleDataInitializer()
sample_initializer.initialize_all_sample_data()
logger.info("示例数据初始化完成")
except Exception as e:
logger.warning(f"示例数据初始化失败: {str(e)}")
logger.info("服务将继续启动,但示例数据不可用")
yield
# 关闭时
logger.info("数据库接口服务关闭中...")
# 关闭所有数据库连接
for connection_id in db_manager.list_connections():
db_manager.close_connection(connection_id)
logger.info("所有数据库连接已关闭")
# 创建FastAPI应用
app = FastAPI(
title="数据库接口服务",
description="提供统一的数据库管理接口支持MySQL、Oracle、SQL Server、PostgreSQL等多种数据库类型",
version="1.0.0",
docs_url="/docs",
redoc_url="/redoc",
lifespan=lifespan
)
# 添加CORS中间件
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # 在生产环境中应该设置具体的域名
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# 全局异常处理
@app.exception_handler(Exception)
async def global_exception_handler(request, exc):
"""全局异常处理器"""
logger.error(f"全局异常: {str(exc)}")
return JSONResponse(
status_code=500,
content={
"success": False,
"message": "服务器内部错误",
"error": str(exc)
}
)
# 健康检查接口
@app.get("/health", tags=["系统"])
async def health_check():
"""健康检查接口"""
return {
"success": True,
"message": "服务运行正常",
"data": {
"status": "healthy",
"active_connections": len(db_manager.list_connections())
}
}
# 根路径接口
@app.get("/", tags=["系统"])
async def root():
"""根路径接口"""
return {
"success": True,
"message": "欢迎使用数据库接口服务",
"data": {
"title": "数据库接口服务",
"version": "1.0.0",
"description": "提供统一的数据库管理接口支持MySQL、Oracle、SQL Server、PostgreSQL等多种数据库类型",
"docs_url": "/docs",
"redoc_url": "/redoc"
}
}
# 注册路由
app.include_router(database_router, prefix="/api/v1", tags=["数据库管理"])
app.include_router(tables_router, prefix="/api/v1", tags=["表管理"])
# 主函数
if __name__ == "__main__":
logger.info("启动数据库接口服务...")
uvicorn.run(
"main:app",
host="0.0.0.0",
port=8000,
log_level="info"
)