ST/server/main.py

63 lines
1.9 KiB
Python
Raw Normal View History

2024-08-26 16:05:26 +08:00
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}")