63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
|
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}")
|