Initial commit: Sistema Autoparts DB

- Base de datos SQLite con información de vehículos
- Dashboard web con Flask y Bootstrap
- Scripts de web scraping para RockAuto
- Interfaz CLI para consultas
- Documentación completa del proyecto

Incluye:
- 12 marcas de vehículos
- 10,923 modelos
- 10,919 especificaciones de motores
- 12,075 combinaciones modelo-año-motor
This commit is contained in:
2026-01-19 08:45:03 +00:00
commit f395d67136
59 changed files with 10881 additions and 0 deletions

View File

@@ -0,0 +1,141 @@
#!/usr/bin/env python3
"""
Script para eliminar vehículos de marcas específicas y ocultar marcas sin vehículos
"""
import sqlite3
import os
def remove_brands_and_cleanup():
# Verificar que la base de datos exista
db_path = "vehicle_database/vehicle_database.db"
if not os.path.exists(db_path):
print(f"Error: Base de datos no encontrada en {db_path}")
return
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
print("Eliminando vehículos de marcas específicas y limpiando marcas sin vehículos...")
try:
# Marcas a eliminar
brands_to_remove = ['FORD', 'TOYOTA', 'NISSAN', 'HONDA', 'CHEVROLET']
print(f"Marcas a eliminar: {', '.join(brands_to_remove)}")
# Contar cuántos vehículos vamos a eliminar antes de hacerlo
placeholders = ','.join(['?' for _ in brands_to_remove])
cursor.execute(f"""
SELECT COUNT(*)
FROM model_year_engine mye
JOIN models m ON mye.model_id = m.id
JOIN brands b ON m.brand_id = b.id
WHERE b.name IN ({placeholders})
""", brands_to_remove)
count_to_delete = cursor.fetchone()[0]
print(f"Se eliminarán {count_to_delete} vehículos de las marcas especificadas")
if count_to_delete > 0:
print("Procediendo con la eliminación...")
# Eliminar las combinaciones modelo-año-motor para los modelos de las marcas especificadas
cursor.execute(f"""
DELETE FROM model_year_engine
WHERE model_id IN (
SELECT m.id FROM models m
JOIN brands b ON m.brand_id = b.id
WHERE b.name IN ({placeholders})
)
""", brands_to_remove)
# Eliminar los modelos de las marcas especificadas
cursor.execute(f"""
DELETE FROM models
WHERE brand_id IN (
SELECT id FROM brands WHERE name IN ({placeholders})
)
""", brands_to_remove)
# Eliminar las marcas especificadas
cursor.execute(f"""
DELETE FROM brands
WHERE name IN ({placeholders})
""", brands_to_remove)
conn.commit()
print(f"Se eliminaron {count_to_delete} registros de vehículos de las marcas especificadas")
else:
print("No hay vehículos de las marcas especificadas para eliminar")
# Ahora vamos a limpiar las marcas sin vehículos (aunque en este caso ya se eliminaron)
# pero también limpiaremos cualquier marca que haya quedado sin vehículos
print("\nLimpiando marcas sin vehículos...")
# Encontrar marcas que no tienen modelos asociados
cursor.execute("""
SELECT b.id, b.name
FROM brands b
LEFT JOIN models m ON b.id = m.brand_id
WHERE m.brand_id IS NULL
""")
brands_without_models = cursor.fetchall()
if brands_without_models:
print(f"Marcas sin modelos para eliminar: {[brand[1] for brand in brands_without_models]}")
brand_ids = [str(brand[0]) for brand in brands_without_models]
placeholders = ','.join(brand_ids)
# Eliminar estas marcas
cursor.execute(f"""
DELETE FROM brands
WHERE id IN ({placeholders})
""")
else:
print("No hay marcas sin modelos para eliminar")
# Mostrar un resumen de la base de datos actualizada
print("\nResumen de la base de datos actualizada:")
# Contar vehículos restantes
cursor.execute("""
SELECT COUNT(*)
FROM model_year_engine mye
JOIN models m ON mye.model_id = m.id
JOIN brands b ON m.brand_id = b.id
""")
total_vehicles = cursor.fetchone()[0]
print(f"Total de vehículos restantes: {total_vehicles}")
# Contar marcas restantes
cursor.execute("SELECT COUNT(*) FROM brands")
total_brands = cursor.fetchone()[0]
print(f"Total de marcas restantes: {total_brands}")
# Mostrar marcas restantes
cursor.execute("SELECT name FROM brands ORDER BY name")
remaining_brands = cursor.fetchall()
print(f"Marcas restantes: {[brand[0] for brand in remaining_brands]}")
# Mostrar rango de años actual
cursor.execute("""
SELECT MIN(y.year), MAX(y.year)
FROM years y
JOIN model_year_engine mye ON y.id = mye.year_id
""")
min_year, max_year = cursor.fetchone()
if min_year and max_year:
print(f"Rango de años actual: {min_year} - {max_year}")
else:
print("No hay años con vehículos registrados")
except Exception as e:
print(f"Error al eliminar marcas y limpiar la base de datos: {e}")
conn.rollback()
finally:
conn.close()
if __name__ == "__main__":
remove_brands_and_cleanup()