Skip to main content

Usar SQLite en reComputer

Introducción

Este wiki explica cómo usar SQLite en la caja reComputer. SQLite es un sistema de gestión de bases de datos relacionales ligero e integrado ampliamente utilizado en dispositivos móviles, aplicaciones de escritorio y sistemas embebidos. No requiere un proceso de servidor separado; la base de datos se almacena directamente en un solo archivo de disco ordinario. SQLite es simple de usar y ofrece un excelente rendimiento. Soporta sintaxis SQL estándar y es adecuado para necesidades de almacenamiento de datos pequeñas a medianas. Debido a sus características de configuración cero y fácil implementación, SQLite se ha convertido en el motor de base de datos preferido para muchos proyectos.

Preparar Hardware

reComputer R1125reComputer AI R2130reComputer AI Industrial R2145

Preparar software

actualizar el sistema

sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
sudo apt update
sudo apt full-upgrade

Instalar SQLite

sudo apt-get install sqlite3

Crear base de datos

sqlite3 sensordata.db

Con el comando .help puedes recordar rápidamente todos los comandos soportados y su respectivo uso.

sqlite> .help

Luego usa .quit para salir del shell de SQLite.

sqlite> .quit

Usando SQL

SQL crear tabla

sqlite3 sensordata.db

Luego usa un comando como el siguiente para crear una nueva tabla.

ain@raspberrypi:~ $ sqlite3 sensordata.db
SQLite version 3.40.1 2022-12-28 14:03:47
Enter ".help" for usage hints.
sqlite> BEGIN;
sqlite> CREATE TABLE dhtreadings (
...> id INTEGER PRIMARY KEY AUTOINCREMENT,
...> temperature NUMERIC,
...> humidity NUMERIC,
...> currentdate DATE,
...> currenttime TIME,
...> device TEXT
...> );
sqlite> COMMIT;

Verificar la tabla

Puedes usar el siguiente comando para ver la tabla creada.

sqlite> .tables
dhtreadings
sqlite> .fullschema
CREATE TABLE dhtreadings (
id INTEGER PRIMARY KEY AUTOINCREMENT,

temperature NUMERIC,
humidity NUMERIC,
currentdate DATE,
currenttime TIME,
device TEXT
);
/* No STAT tables available */

SQL insertar

Para insertar nuevas lecturas de temperatura y humedad en la base de datos, podrías hacer algo como esto:

sqlite> BEGIN;
sqlite> INSERT INTO dhtreadings(temperature, humidity, currentdate, currenttime, device) values(22.4, 48, date('now'), time('now'), "manual");
sqlite> COMMIT;

SQL seleccionar

Para acceder a los datos almacenados en la base de datos, usas la declaración SQL SELECT:

sqlite> SELECT * FROM dhtreadings;
1|22.4|48|2025-09-26|01:23:37|manual

Hasta ahora, solo tienes 1 lectura insertada en la base de datos. Puedes insertar una nueva lectura de la siguiente manera:

sqlite> BEGIN;
sqlite> INSERT INTO dhtreadings(temperature, humidity, currentdate, currenttime, device) values(22.5, 48.7, date('now'), time('now'), "manual");
sqlite> COMMIT;

Y cuando haces SELECT de los datos almacenados en la tabla, devuelve 2 lecturas:

sqlite> SELECT * FROM dhtreadings;
1|22.4|48|2025-09-26|01:23:37|manual
2|22.5|48.7|2025-09-26|02:06:35|manual

SQL eliminar

Si quieres eliminar completamente la tabla de tu base de datos, puedes usar el comando DROP TABLE.

NOTA: el siguiente comando eliminará completamente la tabla dhtreadings:

sqlite> DROP TABLE dhtreadings;

Ahora, si escribes el comando '.tables':

sqlite> .tables

No devuelve nada, porque tu tabla fue completamente eliminada.

Usar Python con SQLite

Usar Python para interactuar con SQLite como se muestra a continuación:

test_sqlite.py
import sqlite3
from datetime import datetime
import os

def create_connection(db_file="dht_readings.db"):
"""Create a database connection to the SQLite database"""
conn = None
try:
conn = sqlite3.connect(db_file)
print(f"Connected to SQLite database: {db_file}")
except sqlite3.Error as e:
print(f"Error connecting to database: {e}")
return conn

def create_table(conn):
"""Create the dhtreadings table if it doesn't exist"""
try:
sql_create_dhtreadings_table = """
CREATE TABLE IF NOT EXISTS dhtreadings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
temperature REAL NOT NULL,
humidity REAL NOT NULL,
currentdate TEXT NOT NULL,
currenttime TEXT NOT NULL,
device TEXT NOT NULL
);
"""
conn.cursor().execute(sql_create_dhtreadings_table)
conn.commit()
print("DHT readings table created successfully")
except sqlite3.Error as e:
print(f"Error creating table: {e}")

def insert_dht_reading(conn, temperature, humidity, device):
"""Insert a new DHT reading into the dhtreadings table"""
sql_insert = """INSERT INTO dhtreadings(temperature, humidity, currentdate, currenttime, device)
VALUES(?, ?, date('now'), time('now'), ?);"""
try:
cursor = conn.cursor()
cursor.execute(sql_insert, (temperature, humidity, device))
conn.commit()
print(f"New record created successfully with ID: {cursor.lastrowid}")
return cursor.lastrowid
except sqlite3.Error as e:
print(f"Error inserting data: {e}")
return None

def select_all_readings(conn):
"""Query all DHT readings in the dhtreadings table"""
try:
cursor = conn.cursor()
cursor.execute("SELECT * FROM dhtreadings ORDER BY currentdate DESC, currenttime DESC")

rows = cursor.fetchall()
print("\nAll DHT readings:")
print("ID | Temperature | Humidity | Date | Time | Device")
print("-" * 60)
for row in rows:
print(f"{row[0]} | {row[1]} | {row[2]} | {row[3]} | {row[4]} | {row[5]}")
except sqlite3.Error as e:
print(f"Error fetching data: {e}")

def main():
# Create a database connection
database = "dht_readings.db"
conn = create_connection(database)

# Create table
if conn is not None:
create_table(conn)

# Insert a sample reading as specified in your requirement
insert_dht_reading(conn, 22.5, 48.7, "manual")

# Insert some additional sample data for testing
insert_dht_reading(conn, 23.1, 45.2, "sensor1")
insert_dht_reading(conn, 21.8, 50.3, "sensor2")

# Display all readings
select_all_readings(conn)

# Close the connection
conn.close()
print("\nDatabase connection closed.")
else:
print("Error! Cannot create database connection.")

if __name__ == '__main__':
main()

Soporte Técnico y Discusión de Productos

¡Gracias por elegir nuestros productos! Estamos aquí para brindarte diferentes tipos de soporte para asegurar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para satisfacer diferentes preferencias y necesidades.

Loading Comments...