JairoDanielMT's picture
Update main.py
6adb364 verified
raw
history blame contribute delete
No virus
2.64 kB
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field
import sqlite3
import uvicorn
from fastapi.middleware.cors import CORSMiddleware
class SensorData(BaseModel):
timestamp: str
humedad_suelo: float
luz: float
turbidez: float
voltaje: float
estado: str
app = FastAPI(
title="API para Arduino Sensor Data",
description="API para almacenar datos de sensores de Arduino en una base de datos SQLite",
version="1.2.1",
)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/")
def read_root():
return {"message": "Welcome to the Arduino sensor data API"}
# Modelo para recibir consultas SQL
class SQLQuery(BaseModel):
query: str
# Conexión a la base de datos SQLite
def get_db_connection():
conn = sqlite3.connect('arduino_data.db')
conn.row_factory = sqlite3.Row
return conn
@app.post("/execute", summary="Ejecutar consulta SQL", description="Ejecuta una consulta SQL en la base de datos SQLite")
def execute_query(sql_query: SQLQuery):
conn = get_db_connection()
try:
cleaned_query = sql_query.query.replace("\nObservation", "").replace("\\'", "'")
print("Solicitud POST completa:", sql_query.json())
print("Consulta recibida en el servidor:", cleaned_query)
cursor = conn.cursor()
cursor.execute(cleaned_query)
conn.commit()
if cursor.description: # Verifica si la consulta tiene resultados
results = cursor.fetchall()
return {"results": [dict(row) for row in results]}
return {"message": "Consulta ejecutada exitosamente"}
except sqlite3.Error as e:
raise HTTPException(status_code=400, detail=str(e))
finally:
conn.close()
@app.post("/sensor_data")
async def create_sensor_data(sensor_data: SensorData):
try:
conn = sqlite3.connect("arduino_data.db")
cursor = conn.cursor()
cursor.execute(
"INSERT INTO sensor_data (timestamp, humedad_suelo, luz, turbidez, voltaje, estado) VALUES (?, ?, ?, ?, ?, ?)",
(
sensor_data.timestamp,
sensor_data.humedad_suelo,
sensor_data.luz,
sensor_data.turbidez,
sensor_data.voltaje,
sensor_data.estado,
),
)
conn.commit()
conn.close()
except Exception as e:
raise HTTPException(status_code=500, detail=f"Error inserting data: {e}")
return {"message": "Data inserted successfully"}