- 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
317 lines
11 KiB
Python
317 lines
11 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Script para agregar datos de Acura a la base de datos de vehículos
|
|
"""
|
|
|
|
import sqlite3
|
|
import os
|
|
|
|
def add_acura_data():
|
|
# 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("Agregando datos de Acura a la base de datos...")
|
|
|
|
try:
|
|
# Insertar la marca Acura
|
|
cursor.execute("INSERT OR IGNORE INTO brands (name) VALUES (?)", ("ACURA",))
|
|
cursor.execute("SELECT id FROM brands WHERE name = ?", ("ACURA",))
|
|
brand_id = cursor.fetchone()[0]
|
|
print(f"Marca ACURA tiene ID: {brand_id}")
|
|
|
|
# Insertar modelos de Acura
|
|
models = [
|
|
'MDX', 'ADX', 'INTEGRA', 'RDX', 'TLX', 'ZDX', 'ILX', 'NSX', 'RLX', 'TL', 'TSX', 'CSX'
|
|
]
|
|
|
|
for model in models:
|
|
cursor.execute(
|
|
"INSERT OR IGNORE INTO models (brand_id, name) VALUES (?, ?)",
|
|
(brand_id, model)
|
|
)
|
|
print(f"Agregados {len(models)} modelos de Acura")
|
|
|
|
# Datos de años y motores para cada modelo
|
|
acura_data = [
|
|
# 2026
|
|
('MDX', 2026, '3.0L V6 Turbocharged'),
|
|
('MDX', 2026, '3.5L V6'),
|
|
|
|
# 2025
|
|
('ADX', 2025, '1.5L L4 Turbocharged'),
|
|
('INTEGRA', 2025, '1.5L L4 Turbocharged'),
|
|
('INTEGRA', 2025, '2.0L L4 Turbocharged'),
|
|
('MDX', 2025, '3.0L V6 Turbocharged'),
|
|
('MDX', 2025, '3.5L V6'),
|
|
('RDX', 2025, '2.0L L4 Turbocharged'),
|
|
('TLX', 2025, '2.0L L4 Turbocharged'),
|
|
('TLX', 2025, '3.0L V6 Turbocharged'),
|
|
|
|
# 2024
|
|
('INTEGRA', 2024, '1.5L L4 Turbocharged'),
|
|
('INTEGRA', 2024, '2.0L L4 Turbocharged'),
|
|
('MDX', 2024, '3.0L V6 Turbocharged'),
|
|
('MDX', 2024, '3.5L V6'),
|
|
('RDX', 2024, '2.0L L4 Turbocharged'),
|
|
('TLX', 2024, '2.0L L4 Turbocharged'),
|
|
('TLX', 2024, '3.0L V6 Turbocharged'),
|
|
('ZDX', 2024, 'ELECTRIC'),
|
|
|
|
# 2023
|
|
('INTEGRA', 2023, '1.5L L4 Turbocharged'),
|
|
('MDX', 2023, '3.0L V6 Turbocharged'),
|
|
('MDX', 2023, '3.5L V6'),
|
|
('RDX', 2023, '2.0L L4 Turbocharged'),
|
|
('TLX', 2023, '2.0L L4 Turbocharged'),
|
|
('TLX', 2023, '3.0L V6 Turbocharged'),
|
|
|
|
# 2022
|
|
('ILX', 2022, '2.4L L4'),
|
|
('MDX', 2022, '3.0L V6 Turbocharged'),
|
|
('MDX', 2022, '3.5L V6'),
|
|
('NSX', 2022, '3.5L V6 ELECTRIC/GAS Turbocharged'),
|
|
('RDX', 2022, '2.0L L4 Turbocharged'),
|
|
('TLX', 2022, '2.0L L4 Turbocharged'),
|
|
('TLX', 2022, '3.0L V6 Turbocharged'),
|
|
|
|
# 2021
|
|
('ILX', 2021, '2.4L L4'),
|
|
('NSX', 2021, '3.5L V6 ELECTRIC/GAS Turbocharged'),
|
|
('RDX', 2021, '2.0L L4 Turbocharged'),
|
|
('TLX', 2021, '2.0L L4 Turbocharged'),
|
|
('TLX', 2021, '3.0L V6 Turbocharged'),
|
|
|
|
# 2020
|
|
('ILX', 2020, '2.4L L4'),
|
|
('MDX', 2020, '3.0L V6 ELECTRIC/GAS'),
|
|
('MDX', 2020, '3.5L V6'),
|
|
('NSX', 2020, '3.5L V6 ELECTRIC/GAS Turbocharged'),
|
|
('RDX', 2020, '2.0L L4 Turbocharged'),
|
|
('RLX', 2020, '3.5L V6'),
|
|
('RLX', 2020, '3.5L V6 ELECTRIC/GAS'),
|
|
('TLX', 2020, '2.4L L4'),
|
|
('TLX', 2020, '3.5L V6 DOHC'),
|
|
('TLX', 2020, '3.5L V6 SOHC'),
|
|
|
|
# 2019
|
|
('ILX', 2019, '2.4L L4'),
|
|
('MDX', 2019, '3.0L V6'),
|
|
('MDX', 2019, '3.0L V6 ELECTRIC/GAS'),
|
|
('MDX', 2019, '3.5L V6'),
|
|
('NSX', 2019, '3.5L V6 ELECTRIC/GAS Turbocharged'),
|
|
('RDX', 2019, '2.0L L4 Turbocharged'),
|
|
('RLX', 2019, '3.5L V6'),
|
|
('RLX', 2019, '3.5L V6 ELECTRIC/GAS'),
|
|
('TLX', 2019, '2.4L L4'),
|
|
('TLX', 2019, '3.5L V6'),
|
|
|
|
# 2018
|
|
('ILX', 2018, '2.4L L4'),
|
|
('MDX', 2018, '3.0L V6 ELECTRIC/GAS'),
|
|
('MDX', 2018, '3.5L V6'),
|
|
('NSX', 2018, '3.5L V6 ELECTRIC/GAS Turbocharged'),
|
|
('RDX', 2018, '3.5L V6'),
|
|
('RLX', 2018, '3.5L V6'),
|
|
('RLX', 2018, '3.5L V6 ELECTRIC/GAS'),
|
|
('TLX', 2018, '2.4L L4'),
|
|
('TLX', 2018, '3.5L V6'),
|
|
|
|
# 2017
|
|
('ILX', 2017, '2.4L L4'),
|
|
('MDX', 2017, '3.0L V6 ELECTRIC/GAS'),
|
|
('MDX', 2017, '3.5L V6'),
|
|
('NSX', 2017, '3.5L V6 ELECTRIC/GAS Turbocharged'),
|
|
('RDX', 2017, '3.5L V6'),
|
|
('RLX', 2017, '3.5L V6'),
|
|
('RLX', 2017, '3.5L V6 ELECTRIC/GAS'),
|
|
('TLX', 2017, '2.4L L4'),
|
|
('TLX', 2017, '3.5L V6'),
|
|
|
|
# 2016
|
|
('ILX', 2016, '2.4L L4'),
|
|
('MDX', 2016, '3.5L V6'),
|
|
('RDX', 2016, '3.5L V6'),
|
|
('RLX', 2016, '3.5L V6'),
|
|
('RLX', 2016, '3.5L V6 ELECTRIC/GAS'),
|
|
('TLX', 2016, '2.4L L4'),
|
|
('TLX', 2016, '3.5L V6'),
|
|
|
|
# 2015
|
|
('ILX', 2015, '1.5L L4 ELECTRIC/GAS'),
|
|
('ILX', 2015, '2.0L L4'),
|
|
('ILX', 2015, '2.4L L4'),
|
|
('MDX', 2015, '3.5L V6'),
|
|
('RDX', 2015, '3.5L V6'),
|
|
('RLX', 2015, '3.5L V6'),
|
|
('RLX', 2015, '3.5L V6 ELECTRIC/GAS'),
|
|
('TLX', 2015, '2.4L L4'),
|
|
('TLX', 2015, '3.5L V6'),
|
|
|
|
# 2014
|
|
('ILX', 2014, '1.5L L4 ELECTRIC/GAS'),
|
|
('ILX', 2014, '2.0L L4'),
|
|
('ILX', 2014, '2.4L L4'),
|
|
('MDX', 2014, '3.5L V6'),
|
|
('RDX', 2014, '3.5L V6'),
|
|
('RLX', 2014, '3.5L V6'),
|
|
('RLX', 2014, '3.5L V6 ELECTRIC/GAS'),
|
|
('TL', 2014, '3.5L V6'),
|
|
('TSX', 2014, '2.4L L4'),
|
|
('TSX', 2014, '3.5L V6'),
|
|
|
|
# 2013
|
|
('ILX', 2013, '1.5L L4 ELECTRIC/GAS'),
|
|
('ILX', 2013, '2.0L L4'),
|
|
('ILX', 2013, '2.4L L4'),
|
|
('MDX', 2013, '3.7L V6'),
|
|
('RDX', 2013, '3.5L V6'),
|
|
('TL', 2013, '3.5L V6'),
|
|
('TL', 2013, '3.7L V6'),
|
|
('TSX', 2013, '2.4L L4'),
|
|
('TSX', 2013, '3.5L V6'),
|
|
('ZDX', 2013, '3.7L V6'),
|
|
|
|
# 2012
|
|
('MDX', 2012, '3.7L V6'),
|
|
('RDX', 2012, '2.3L L4 Turbocharged'),
|
|
('RL', 2012, '3.7L V6'),
|
|
('TL', 2012, '3.5L V6'),
|
|
('TL', 2012, '3.7L V6'),
|
|
('TSX', 2012, '2.4L L4'),
|
|
('TSX', 2012, '3.5L V6'),
|
|
('ZDX', 2012, '3.7L V6'),
|
|
|
|
# 2011
|
|
('CSX', 2011, '2.0L L4'),
|
|
('MDX', 2011, '3.7L V6'),
|
|
('RDX', 2011, '2.3L L4 Turbocharged'),
|
|
('RL', 2011, '3.7L V6'),
|
|
('TL', 2011, '3.5L V6'),
|
|
('TL', 2011, '3.7L V6'),
|
|
('TSX', 2011, '2.4L L4'),
|
|
('TSX', 2011, '3.5L V6'),
|
|
('ZDX', 2011, '3.7L V6'),
|
|
|
|
# 2010
|
|
('CSX', 2010, '2.0L L4'),
|
|
('MDX', 2010, '3.7L V6'),
|
|
('RDX', 2010, '2.3L L4 Turbocharged'),
|
|
('RL', 2010, '3.7L V6'),
|
|
('TL', 2010, '3.5L V6'),
|
|
('TL', 2010, '3.7L V6'),
|
|
('TSX', 2010, '2.4L L4'),
|
|
('TSX', 2010, '3.5L V6'),
|
|
('ZDX', 2010, '3.7L V6'),
|
|
|
|
# 2009
|
|
('CSX', 2009, '2.0L L4'),
|
|
('MDX', 2009, '3.7L V6'),
|
|
('RDX', 2009, '2.3L L4 Turbocharged'),
|
|
('RL', 2009, '3.7L V6'),
|
|
('TL', 2009, '3.5L V6'),
|
|
('TL', 2009, '3.7L V6'),
|
|
('TSX', 2009, '2.4L L4'),
|
|
('TSX', 2009, '3.5L V6'),
|
|
|
|
# 2008
|
|
('CSX', 2008, '2.0L L4'),
|
|
('MDX', 2008, '3.7L V6'),
|
|
('RDX', 2008, '2.3L L4 Turbocharged'),
|
|
('RL', 2008, '3.5L V6'),
|
|
('TL', 2008, '3.2L V6'),
|
|
('TL', 2008, '3.5L V6'),
|
|
('TSX', 2008, '2.4L L4'),
|
|
('TSX', 2008, '3.5L V6'),
|
|
|
|
# 2007
|
|
('CSX', 2007, '2.0L L4'),
|
|
('MDX', 2007, '3.7L V6'),
|
|
('RDX', 2007, '2.3L L4 Turbocharged'),
|
|
('RL', 2007, '3.5L V6'),
|
|
('TL', 2007, '3.2L V6'),
|
|
('TL', 2007, '3.5L V6'),
|
|
('TSX', 2007, '2.4L L4')
|
|
]
|
|
|
|
# Insertar años
|
|
years = list(set([data[1] for data in acura_data])) # Obtener años únicos
|
|
for year in years:
|
|
cursor.execute("INSERT OR IGNORE INTO years (year) VALUES (?)", (year,))
|
|
print(f"Agregados {len(years)} años")
|
|
|
|
# Insertar motores
|
|
engines = list(set([data[2] for data in acura_data])) # Obtener motores únicos
|
|
for engine in engines:
|
|
cursor.execute("INSERT OR IGNORE INTO engines (name) VALUES (?)", (engine,))
|
|
print(f"Agregados {len(engines)} motores")
|
|
|
|
# Crear combinaciones modelo-año-motor
|
|
for model_name, year, engine_name in acura_data:
|
|
# Obtener IDs
|
|
cursor.execute("SELECT id FROM models WHERE brand_id = ? AND name = ?", (brand_id, model_name))
|
|
model_result = cursor.fetchone()
|
|
if model_result:
|
|
model_id = model_result[0]
|
|
else:
|
|
print(f"Advertencia: Modelo {model_name} no encontrado para la marca ACURA")
|
|
continue
|
|
|
|
cursor.execute("SELECT id FROM years WHERE year = ?", (year,))
|
|
year_result = cursor.fetchone()
|
|
if year_result:
|
|
year_id = year_result[0]
|
|
else:
|
|
print(f"Advertencia: Año {year} no encontrado")
|
|
continue
|
|
|
|
cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,))
|
|
engine_result = cursor.fetchone()
|
|
if engine_result:
|
|
engine_id = engine_result[0]
|
|
else:
|
|
print(f"Advertencia: Motor {engine_name} no encontrado")
|
|
continue
|
|
|
|
# Insertar la combinación modelo-año-motor
|
|
cursor.execute(
|
|
"""INSERT OR REPLACE INTO model_year_engine
|
|
(model_id, year_id, engine_id) VALUES (?, ?, ?)""",
|
|
(model_id, year_id, engine_id)
|
|
)
|
|
|
|
conn.commit()
|
|
print(f"Se agregaron {len(acura_data)} combinaciones modelo-año-motor para ACURA")
|
|
print("Datos de ACURA agregados exitosamente a la base de datos!")
|
|
|
|
# Mostrar algunos resultados
|
|
print("\nAlgunos vehículos ACURA agregados:")
|
|
cursor.execute("""
|
|
SELECT b.name, m.name, y.year, e.name
|
|
FROM model_year_engine mye
|
|
JOIN models m ON mye.model_id = m.id
|
|
JOIN brands b ON m.brand_id = b.id
|
|
JOIN years y ON mye.year_id = y.id
|
|
JOIN engines e ON mye.engine_id = e.id
|
|
WHERE b.name = 'ACURA'
|
|
ORDER BY m.name, y.year DESC
|
|
LIMIT 15
|
|
""")
|
|
|
|
results = cursor.fetchall()
|
|
for brand, model, year, engine in results:
|
|
print(f" {year} {brand} {model} - {engine}")
|
|
|
|
except Exception as e:
|
|
print(f"Error al agregar datos de ACURA: {e}")
|
|
conn.rollback()
|
|
finally:
|
|
conn.close()
|
|
|
|
if __name__ == "__main__":
|
|
add_acura_data() |