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.9.tar.gz (49.4 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.9-py3-none-any.whl (41.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sqliteplus_enhanced-1.0.9.tar.gz
  • Upload date:
  • Size: 49.4 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.9.tar.gz
Algorithm Hash digest
SHA256 3e4067b95d57bef4369316c4cbf116a637430372b2b185ffb656ea544b1478f0
MD5 e0eb4665b843d794c8bb07e06f22760f
BLAKE2b-256 1bdad1561ebedf067502f860451fb81e96af08f895f513172c37f09e9db1e2d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sqliteplus_enhanced-1.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 c01d2c11ef8c91c6177a79912418ddaa92909d18ec2eb19bdb80f710283e4ff3
MD5 ac04c51b69fe7e01d384402a519a14b3
BLAKE2b-256 aded537575e76c5c814bfa984b688d27acf4ad989826dbf101c8f79999bef89f

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