Spaces:
Sleeping
Sleeping
| from pydantic import BaseModel | |
| from fastapi import FastAPI, HTTPException, Depends | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from sqlalchemy import create_engine, text | |
| from sqlalchemy.orm import sessionmaker, declarative_base | |
| import uvicorn | |
| import os | |
| from dotenv import load_dotenv | |
| load_dotenv() # Carga las variables de entorno desde el archivo .env | |
| DATABASE_URL = os.getenv("DB_URI") | |
| # Configurar SQLAlchemy | |
| engine = create_engine(DATABASE_URL) | |
| SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) | |
| Base = declarative_base() | |
| # CORS | |
| app = FastAPI() | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| # Modelo para recibir consultas SQL | |
| class SQLQuery(BaseModel): | |
| query: str | |
| # Dependencia para obtener la sesi贸n de la base de datos | |
| def get_db(): | |
| db = SessionLocal() | |
| try: | |
| yield db | |
| finally: | |
| db.close() | |
| def execute_query(sql_query: SQLQuery, db=Depends(get_db)): | |
| try: | |
| result = db.execute(text(sql_query.query)) | |
| if result.returns_rows: | |
| rows = result.fetchall() | |
| columns = result.keys() | |
| results = [dict(zip(columns, row)) for row in rows] | |
| return {"results": results} | |
| db.commit() | |
| return {"message": "Consulta ejecutada exitosamente"} | |
| except Exception as e: | |
| db.rollback() | |
| raise HTTPException(status_code=400, detail=str(e)) | |
| def list_tables(db=Depends(get_db)): | |
| try: | |
| result = db.execute(text("SHOW TABLES;")) | |
| tables = [row[0] for row in result.fetchall()] | |
| return {"tables": tables} | |
| except Exception as e: | |
| raise HTTPException(status_code=400, detail=str(e)) | |
| if __name__ == "__main__": | |
| uvicorn.run(app, host="0.0.0.0", port=7860) | |