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
sqlitepluscon subcomandos claros para tareas diarias.
📦 Instalación rápida
- Asegúrate de tener Python 3.10 o superior.
- 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:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
🧪 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-keyo la variableSQLITE_DB_KEYpara abrir bases cifradas.--db-pathpara indicar el archivo de base de datos que usarán todos los subcomandos.
Comandos disponibles:
sqliteplus init-dbcrea la base y deja constancia en la tablalogs.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-tablespresenta 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-infomuestra 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 backupgenera un respaldo fechado en la carpetabackups/. 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c6853c7ac3431443429723adbb9d893588f415c3520e540fd1cd7dc51d2841a
|
|
| MD5 |
22cd8a255cba660a761a155f17c788e7
|
|
| BLAKE2b-256 |
5c55662953619e0916f367584e0f6e70a0db996564b911ec549ce17a7b2de9cd
|
File details
Details for the file sqliteplus_enhanced-1.0.8-py3-none-any.whl.
File metadata
- Download URL: sqliteplus_enhanced-1.0.8-py3-none-any.whl
- Upload date:
- Size: 41.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e6eaf80cfb89b280bf81c11a10349ce925b7ff66ee556128f36bf6415f9969a7
|
|
| MD5 |
0e09b349df96e0289ffeb0efb906d977
|
|
| BLAKE2b-256 |
5907a34ec05a9f0707d5d9cc8dacd66cfceda0a41ee164ac2459365291a580b0
|