Skip to main content

SQLite mejorado con cifrado SQLCipher, caché en Redis y API REST asincrónica con FastAPI

Project description

SQLitePlus Enhanced

SQLitePlus Enhanced es una caja de herramientas en Python que facilita el trabajo con bases de datos SQLite. Puedes usarla para levantar una API con FastAPI o para gestionar la base desde la línea de comandos sin escribir código adicional.

✨ Qué incluye

  • 🔄 Manejo seguro de varias bases SQLite desde tareas asíncronas.
  • 🔐 Inicio de sesión mediante JSON Web Tokens con contraseñas protegidas con bcrypt.
  • 🔑 Compatibilidad opcional con SQLCipher tanto en la API como en la consola.
  • 💾 Utilidades sencillas para exportar tablas a CSV y crear copias de seguridad automáticas.
  • 🧰 Comando sqliteplus con subcomandos claros para tareas diarias.

📦 Instalación rápida

  1. Asegúrate de tener Python 3.10 o superior.
  2. Instala la librería:
pip install sqliteplus-enhanced

¿Vas a colaborar con el código? Instálala en modo editable:

pip install -e .

🔐 Configuración mínima

Guarda tus claves como variables de entorno para evitar dejarlas en el código.

Variable Obligatoria Para qué sirve
SECRET_KEY Firmar los tokens JWT de la API.
SQLITEPLUS_USERS_FILE Ubicación del JSON con usuarios y contraseñas encriptadas con bcrypt.
SQLITE_DB_KEY Opcional Clave SQLCipher para abrir bases cifradas desde la API o la CLI.

Ejemplo rápido para generar valores seguros:

export SECRET_KEY=$(python -c "import secrets; print(secrets.token_urlsafe(32))")
export SQLITE_DB_KEY=$(python -c "import secrets; print(secrets.token_hex(32))")

Crear un archivo de usuarios con el login admin:

python - <<'PY'
import bcrypt, json, pathlib

password = "admin"
hash_ = bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode()
path = pathlib.Path("users.json")
path.write_text(json.dumps({"admin": hash_}, indent=2), encoding="utf-8")
print(f"Archivo generado en {path.resolve()}")
PY

export SQLITEPLUS_USERS_FILE="$(pwd)/users.json"

🚀 Levantar la API

uvicorn sqliteplus.main:app --reload

Una vez en marcha tendrás disponible la documentación interactiva en:


🧪 Ejecutar las pruebas

pytest -v

La capa de base de datos detecta automáticamente las ejecuciones de pytest y utiliza archivos temporales para que cada prueba sea independiente.


🛠️ Usar la CLI sqliteplus

El comando principal admite dos opciones globales:

  • --cipher-key o la variable SQLITE_DB_KEY para abrir bases cifradas.
  • --db-path para indicar el archivo de base de datos que usarán todos los subcomandos.

Comandos disponibles:

  • sqliteplus init-db crea la base y deja constancia en la tabla logs.
  • sqliteplus execute INSERT ... ejecuta instrucciones de escritura y muestra el último ID insertado cuando aplica.
  • sqliteplus fetch SELECT ... muestra los resultados fila por fila, avisando si no hay datos.
  • sqliteplus list-tables presenta en una tabla rica todas las tablas disponibles y sus recuentos de filas.
  • sqliteplus describe-table <tabla> resume las columnas, índices y relaciones de la tabla indicada.
  • sqliteplus db-info muestra un resumen del archivo activo (ruta, tamaño, tablas, vistas y filas totales).
  • sqliteplus export-csv <tabla> <archivo.csv> guarda la tabla en un CSV con encabezados.
  • sqliteplus backup genera un respaldo fechado en la carpeta backups/. Puedes especificar otra ruta con --db-path.

Gracias a la integración con Rich todos los mensajes de la CLI se muestran con colores, paneles y tablas que facilitan su lectura y accesibilidad.

Ejemplo combinando opciones:

sqliteplus --db-path databases/demo.db --cipher-key "$SQLITE_DB_KEY" backup

🗂️ Estructura del proyecto

sqliteplus/
├── main.py                # Punto de entrada FastAPI
├── api/                   # Endpoints REST protegidos
├── auth/                  # Gestión JWT y validaciones
├── core/                  # Servicios asincrónicos y modelos
├── utils/                 # Herramientas sincrónicas, replicación y CLI
└── tests/                 # Pruebas automatizadas

📝 Licencia

MIT License © Adolfo González Hernández

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sqliteplus_enhanced-1.0.8.tar.gz (49.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sqliteplus_enhanced-1.0.8-py3-none-any.whl (41.5 kB view details)

Uploaded Python 3

File details

Details for the file sqliteplus_enhanced-1.0.8.tar.gz.

File metadata

  • Download URL: sqliteplus_enhanced-1.0.8.tar.gz
  • Upload date:
  • Size: 49.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for sqliteplus_enhanced-1.0.8.tar.gz
Algorithm Hash digest
SHA256 0c6853c7ac3431443429723adbb9d893588f415c3520e540fd1cd7dc51d2841a
MD5 22cd8a255cba660a761a155f17c788e7
BLAKE2b-256 5c55662953619e0916f367584e0f6e70a0db996564b911ec549ce17a7b2de9cd

See more details on using hashes here.

File details

Details for the file sqliteplus_enhanced-1.0.8-py3-none-any.whl.

File metadata

File hashes

Hashes for sqliteplus_enhanced-1.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 e6eaf80cfb89b280bf81c11a10349ce925b7ff66ee556128f36bf6415f9969a7
MD5 0e09b349df96e0289ffeb0efb906d977
BLAKE2b-256 5907a34ec05a9f0707d5d9cc8dacd66cfceda0a41ee164ac2459365291a580b0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page