JairoDanielMT commited on
Commit
0e45839
verified
1 Parent(s): b9abe0d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -79
app.py CHANGED
@@ -1,79 +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)
 
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="0.0.0.0", port=7860)