JairoDanielMT commited on
Commit
b9abe0d
verified
1 Parent(s): 25e905b

Upload 3 files

Browse files
Files changed (3) hide show
  1. Dockerfile +15 -0
  2. app.py +79 -0
  3. requirements.txt +5 -0
Dockerfile ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Usa una imagen base de Python
2
+ FROM python:3.9
3
+ # Establece el directorio de trabajo
4
+ WORKDIR /code
5
+
6
+ # Copia los archivos necesarios al contenedor
7
+ COPY ./requirements.txt /code/requirements.txt
8
+ RUN pip install --no-cache-dir -r /code/requirements.txt
9
+
10
+ COPY . .
11
+
12
+ RUN chmod -R 777 /code
13
+
14
+ # Comando para ejecutar la aplicaci贸n
15
+ CMD ["python", "app.py"]
app.py ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pydantic import BaseModel
2
+ from fastapi import FastAPI, HTTPException, Depends
3
+ from fastapi.middleware.cors import CORSMiddleware
4
+ from sqlalchemy import create_engine, text
5
+ from sqlalchemy.orm import sessionmaker, declarative_base
6
+ import uvicorn
7
+ import os
8
+ from dotenv import load_dotenv
9
+
10
+ load_dotenv() # Carga las variables de entorno desde el archivo .env
11
+
12
+ DATABASE_URL = os.getenv("DB_URI")
13
+
14
+ # Configurar SQLAlchemy
15
+ engine = create_engine(DATABASE_URL)
16
+ SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
17
+ Base = declarative_base()
18
+
19
+ # CORS
20
+ app = FastAPI()
21
+ app.add_middleware(
22
+ CORSMiddleware,
23
+ allow_origins=["*"],
24
+ allow_credentials=True,
25
+ allow_methods=["*"],
26
+ allow_headers=["*"],
27
+ )
28
+
29
+
30
+ # Modelo para recibir consultas SQL
31
+ class SQLQuery(BaseModel):
32
+ query: str
33
+
34
+
35
+ # Dependencia para obtener la sesi贸n de la base de datos
36
+ def get_db():
37
+ db = SessionLocal()
38
+ try:
39
+ yield db
40
+ finally:
41
+ db.close()
42
+
43
+
44
+ @app.post(
45
+ "/execute",
46
+ summary="Ejecutar consulta SQL",
47
+ description="Ejecuta una consulta SQL en la base de datos MySQL",
48
+ )
49
+ def execute_query(sql_query: SQLQuery, db=Depends(get_db)):
50
+ try:
51
+ result = db.execute(text(sql_query.query))
52
+ if result.returns_rows:
53
+ rows = result.fetchall()
54
+ columns = result.keys()
55
+ results = [dict(zip(columns, row)) for row in rows]
56
+ return {"results": results}
57
+ db.commit()
58
+ return {"message": "Consulta ejecutada exitosamente"}
59
+ except Exception as e:
60
+ db.rollback()
61
+ raise HTTPException(status_code=400, detail=str(e))
62
+
63
+
64
+ @app.get(
65
+ "/list_tables",
66
+ summary="Listar todas las tablas",
67
+ description="Lista todas las tablas de la base de datos",
68
+ )
69
+ def list_tables(db=Depends(get_db)):
70
+ try:
71
+ result = db.execute(text("SHOW TABLES;"))
72
+ tables = [row[0] for row in result.fetchall()]
73
+ return {"tables": tables}
74
+ except Exception as e:
75
+ raise HTTPException(status_code=400, detail=str(e))
76
+
77
+
78
+ if __name__ == "__main__":
79
+ uvicorn.run(app, host="localhost", port=7860)
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ fastapi
2
+ uvicorn
3
+ python-dotenv
4
+ mysqlclient
5
+ sqlalchemy