from fastapi import FastAPI, Request from fastapi.responses import HTMLResponse from .addons.base.models.configparser import Config from .addons.base.models.configparser import DATABASE_URL import psycopg2 from psycopg2 import sql from fastapi.responses import JSONResponse import logging from fastapi.middleware.cors import CORSMiddleware origins = [ "*", ] logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) app = FastAPI() app.add_middleware( CORSMiddleware, allow_origins=origins, allow_credentials=True, allow_methods=["*"], # 允许所有 HTTP 方法 allow_headers=["*"], # 允许所有头部 ) config = Config() def get_databases(): conn = None try: # 连接到默认的PostgreSQL数据库,通常为postgres conn = psycopg2.connect(DATABASE_URL) # 使用DATABASE_URL连接 conn.autocommit = True # 设置自动提交模式 cursor = conn.cursor() # 查询所有数据库,排除postgres cursor.execute(sql.SQL("SELECT datname FROM pg_database WHERE datistemplate = false AND datname != 'postgres';")) databases = [row[0] for row in cursor.fetchall()] logger.info("获取已有数据库列表: %s", databases) return databases except Exception as e: logger.error("Error getting databases: %s", e) return [] finally: if conn is not None: conn.close() @app.get("/", response_class=JSONResponse) async def get_databases_route(): databases = get_databases() return databases from .addons.base.models import database app.include_router(database.router, prefix="/web/database", tags=["数据库"]) if __name__ == '__main__': try: server_port = config.getint('options', 'http_port') import uvicorn uvicorn.run(app, host="0.0.0.0", port=server_port) except Exception as e: print(f"Failed to start the server: {e}")