“Descubre lo que tus bases esconden.”
Scavengr es una herramienta de línea de comandos para extraer, validar y documentar metadatos de bases de datos con inteligencia automática 🧠✨
Extrae esquemas de bases de datos, genera archivos DBML compatibles con dbdiagram.io, crea diccionarios de datos profesionales y produce informes analíticos detallados.
.env para credencialesscavengr init
scavengr extract -o schema.dbml # Extraer
scavengr validate -i schema.dbml # Validar
scavengr dictionary -i schema.dbml -o dict.xlsx # Documentar
scavengr report -i schema.dbml -o report.xlsx # Analizar
La forma más sencilla de instalar Scavengr es directamente desde PyPI:
# Instalación básica
pip install scavengr
# Verificar instalación
scavengr --version
# Configuración inicial (crea archivo .env)
scavengr init
# ¡Listo para usar!
scavengr extract -o mi-esquema.dbml
# Clonar repositorio
git clone https://github.com/JasRockr/Scavengr.git
cd Scavengr
# Crear entorno virtual (recomendado)
python -m venv .venv
# Activar entorno virtual
# En Windows (PowerShell):
.venv\Scripts\Activate.ps1
# En Linux/Mac:
source .venv/bin/activate
# Instalar Scavengr en modo desarrollo
pip install -e .
# Verificar instalación
scavengr --version
# Para PostgreSQL
pip install psycopg2-binary
# Para MySQL/MariaDB
pip install mysql-connector-python
# Para SQL Server
pip install pyodbc
# En Windows: Instalar ODBC Driver 17 for SQL Server
# Descargar desde: https://learn.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server
# Generar archivo de configuración automáticamente
scavengr init
# O crear configuración global (disponible en cualquier directorio)
scavengr init --global
# Opción 1: Crear archivo .env local (desde desarrollo)
cp .env.example .env
# Opción 2: Crear archivo .env desde cero
echo 'DB_TYPE=postgresql' > .env
echo 'DB_HOST=localhost' >> .env
echo 'DB_NAME=mi_base_datos' >> .env
echo 'DB_USER=usuario_lectura' >> .env
echo 'DB_PASSWORD=contraseña_segura' >> .env
Scavengr busca configuración en este orden de prioridad:
--env-file mi-config.env.env.local → .env~/.scavengr.envexport DB_TYPE=postgresqlTipos de base de datos soportados: postgresql, mysql, mssql
# Extrae esquema completo a archivo DBML
scavengr extract -o /ruta/mi-esquema.dbml
Resultado: Archivo DBML con:
# Valida sintaxis y estructura
scavengr validate -i /ruta/mi-esquema.dbml
# Salida típica:
# ✓ Estructura de tablas: OK
# ✓ Relaciones: 875 validadas
# ⚠ Advertencias: 16 (tablas de auditoría, temporales)
# ✓ Errores: 0
# Genera diccionario en Excel (recomendado)
scavengr dictionary -i /ruta/mi-esquema.dbml -o /ruta/diccionario.xlsx
Resultado: Archivo Excel con 19 campos por columna:
# Genera reporte con métricas en Excel
scavengr report -i /ruta/mi-esquema.dbml -o /ruta/reporte-analisis.xlsx
Resultado: Archivo Excel con 5 hojas:
# Ayuda general
scavengr --help
# Ayuda por comando
scavengr init --help
scavengr extract --help
scavengr validate --help
scavengr dictionary --help
scavengr report --help
# Versión
scavengr --version
extractscavengr extract [OPTIONS]
Opciones:
-o, --output PATH Archivo DBML de salida (requerido)
--env-file PATH Archivo .env específico a usar (default: .env)
--help Mostrar ayuda
validatescavengr validate [OPTIONS]
Opciones:
-i, --input PATH Archivo DBML a validar (requerido)
--help Mostrar ayuda
dictionaryscavengr dictionary [OPTIONS]
Opciones:
-i, --input PATH Archivo DBML de entrada (requerido)
-o, --output PATH Archivo de salida .xlsx (requerido)
--help Mostrar ayuda
initscavengr init [OPTIONS]
Opciones:
--global Crear configuración global en directorio home
--help Mostrar ayuda
reportscavengr report [OPTIONS]
Opciones:
-i, --input PATH Archivo DBML de entrada (requerido)
-o, --output PATH Archivo de salida .xlsx (requerido)
--help Mostrar ayuda
Scavengr necesita solo lectura en vistas del sistema:
GRANT CONNECT ON DATABASE mi_base TO usuario_scavengr;
GRANT USAGE ON SCHEMA information_schema TO usuario_scavengr;
GRANT SELECT ON ALL TABLES IN SCHEMA information_schema TO usuario_scavengr;
GRANT SELECT ON information_schema.* TO 'usuario_scavengr'@'%';
GRANT VIEW DEFINITION TO usuario_scavengr;
-- O simplemente:
ALTER ROLE db_datareader ADD MEMBER usuario_scavengr;
🔒 Scavengr NUNCA modifica datos: Solo lee metadatos del esquema
# El archivo .env NO se debe versionar (está en .gitignore)
# Usa .env.example como plantilla
# Permisos recomendados (Linux/Mac):
chmod 600 .env
Scavengr implementa Clean Architecture con separación clara de responsabilidades:
scavengr/
├── application/ # Casos de uso (extract, validate, dictionary, report)
├── core/ # Entidades de dominio y servicios
│ ├── entities.py # DatabaseSchema, Table, Column, Relationship, Index
│ ├── interfaces.py # Contratos (Scanner, Parser, Exporter)
│ └── services.py # 10 servicios de dominio
├── infrastructure/ # Adaptadores externos
│ ├── database/ # Scanners (PostgreSQL, MySQL, MSSQL)
│ ├── parsers/ # Parser DBML
│ ├── formatters/ # Formatter DBML
│ └── exporters/ # Exportadores (Excel, JSON)
├── config/ # Gestión de configuración
├── utils/ # Utilidades transversales
└── cli.py # Interfaz de línea de comandos
Beneficios:
Algunos casos de uso continuan en desarrollo y requieren extenderse para cobertura completa.
# 1. Extraer esquema
scavengr extract -o /ruta/produccion.dbml
# 2. Validar integridad
scavengr validate -i /ruta/produccion.dbml
# 3. Generar diccionario para el equipo
scavengr dictionary -i /ruta/produccion.dbml -o /ruta/diccionario-produccion.xlsx
# 1. Extraer esquema
scavengr extract -o /ruta/auditoria.dbml
# 2. Generar reporte analítico
scavengr report -i /ruta/auditoria.dbml -o /ruta/reporte-calidad.xlsx
# 3. Revisar score de calidad y recomendaciones
# (Abrir reporte-calidad.xlsx)
# 1. Generar diccionario con análisis de sensibilidad
scavengr dictionary -i /ruta/esquema.dbml -o /ruta/datos-sensibles.xlsx
# 2. Filtrar campos CRÍTICOS y ALTOS en Excel
# 3. Aplicar máscaras de datos sugeridas
# 1. Extraer esquema origen
scavengr extract -o /ruta/origen.dbml
# 2. Extraer esquema destino
scavengr extract --env-file /ruta/destino.env -o /ruta/destino.dbml
# 3. Comparar manualmente (diff tool)
# 4. Validar ambos esquemas
scavengr validate -i origen.dbml
scavengr validate -i destino.dbml
Table dbo.usuarios {
id_usuario int [pk, increment]
nombre varchar(100) [not null]
email varchar(255) [unique, not null]
fecha_registro datetime [default: `getdate()`]
id_departamento int [ref: > dbo.departamentos.id_departamento]
indexes {
email [unique, name: 'idx_usuarios_email']
(nombre, email) [name: 'idx_usuarios_nombre_email']
}
}
Table dbo.departamentos {
id_departamento int [pk, increment]
nombre varchar(100) [not null]
descripcion text
}
Ref: dbo.usuarios.id_departamento > dbo.departamentos.id_departamento
| Tabla | Columna | Tipo | Sensibilidad | Descripción |
|---|---|---|---|---|
| usuarios | varchar(255) | CRÍTICO | Correo electrónico del usuario | |
| usuarios | nombre | varchar(100) | ALTO | Nombre completo del usuario |
| departamentos | nombre | varchar(100) | BAJO | Nombre del departamento |
pyproject.toml para lista completaLas contribuciones son bienvenidas. Para cambios importantes:
git checkout -b feature/AmazingFeature)git commit -m 'Add: AmazingFeature')git push origin feature/AmazingFeature)Licencia: MIT License - Ver LICENSE para detalles completos
Autor: Jason Rivera (@JasRockr)
Repositorio: https://github.com/JasRockr/Scavengr
✨ Hecho con Python y mucho ☕ para revelar los secretos de tus bases de datos.