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}")
|