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

180
fix_arra_data.py Normal file
View File

@@ -0,0 +1,180 @@
"""
Script to fix the ARRA vehicle data in the database.
This will remove the incorrect entry under Aston Martin and add the correct ARRA entry.
"""
import sqlite3
def connect_db(db_path: str = "vehicle_database/vehicle_database.db") -> sqlite3.Connection:
"""Connect to the vehicle database."""
conn = sqlite3.connect(db_path)
conn.execute("PRAGMA foreign_keys = ON") # Enable foreign key constraints
return conn
def get_or_insert_brand(conn: sqlite3.Connection, brand_name: str) -> int:
"""Get brand ID or insert if it doesn't exist."""
cursor = conn.cursor()
# Check if brand already exists
cursor.execute("SELECT id FROM brands WHERE name = ?", (brand_name,))
result = cursor.fetchone()
if result:
return result[0] # Return existing ID
# Insert new brand
cursor.execute("INSERT INTO brands (name) VALUES (?)", (brand_name,))
conn.commit()
return cursor.lastrowid
def get_or_insert_model(conn: sqlite3.Connection, brand_id: int, model_name: str) -> int:
"""Get model ID or insert if it doesn't exist."""
cursor = conn.cursor()
# Check if model already exists for this brand
cursor.execute(
"SELECT id FROM models WHERE brand_id = ? AND name = ?",
(brand_id, model_name)
)
result = cursor.fetchone()
if result:
return result[0] # Return existing ID
# Insert new model
cursor.execute(
"INSERT INTO models (brand_id, name) VALUES (?, ?)",
(brand_id, model_name)
)
conn.commit()
return cursor.lastrowid
def get_or_insert_engine(conn: sqlite3.Connection, engine_name: str) -> int:
"""Get engine ID or insert if it doesn't exist."""
cursor = conn.cursor()
# Check if engine already exists
cursor.execute("SELECT id FROM engines WHERE name = ?", (engine_name,))
result = cursor.fetchone()
if result:
return result[0] # Return existing ID
# Insert new engine
cursor.execute("INSERT INTO engines (name) VALUES (?)", (engine_name,))
conn.commit()
return cursor.lastrowid
def get_or_insert_year(conn: sqlite3.Connection, year: int) -> int:
"""Get year ID or insert if it doesn't exist."""
cursor = conn.cursor()
# Check if year already exists
cursor.execute("SELECT id FROM years WHERE year = ?", (year,))
result = cursor.fetchone()
if result:
return result[0] # Return existing ID
# Insert new year
cursor.execute("INSERT INTO years (year) VALUES (?)", (year,))
conn.commit()
return cursor.lastrowid
def remove_incorrect_arr_entry(conn: sqlite3.Connection) -> None:
"""Remove the incorrect ARRA entry under Aston Martin."""
cursor = conn.cursor()
# Find the model ID for ARRA under Aston Martin
cursor.execute("""
SELECT m.id
FROM models m
JOIN brands b ON m.brand_id = b.id
WHERE b.name = 'ASTON MARTIN' AND m.name = 'ARRA'
""")
arra_model_result = cursor.fetchone()
if arra_model_result:
arra_model_id = arra_model_result[0]
# Remove the incorrect relationship from model_year_engine
cursor.execute(
"DELETE FROM model_year_engine WHERE model_id = ?",
(arra_model_id,)
)
# Remove the ARRA model from models table
cursor.execute(
"DELETE FROM models WHERE id = ?",
(arra_model_id,)
)
print(f"Removed incorrect ARRA model with ID {arra_model_id} from Aston Martin")
conn.commit()
def insert_correct_arr_entry(conn: sqlite3.Connection) -> None:
"""Insert the correct ARRA EW-1 entry."""
cursor = conn.cursor()
# Get or create ARRA brand
arra_brand_id = get_or_insert_brand(conn, "ARRA")
print(f"ARRA brand ID: {arra_brand_id}")
# Get or create EW-1 model under ARRA brand
ew1_model_id = get_or_insert_model(conn, arra_brand_id, "EW-1")
print(f"EW-1 model ID: {ew1_model_id}")
# Get or create Electric engine
engine_id = get_or_insert_engine(conn, "Electric")
print(f"Electric engine ID: {engine_id}")
# Get or create 2024 year
year_id = get_or_insert_year(conn, 2024)
print(f"Year 2024 ID: {year_id}")
# Check if the correct relationship already exists
cursor.execute(
"SELECT id FROM model_year_engine WHERE model_id = ? AND year_id = ? AND engine_id = ?",
(ew1_model_id, year_id, engine_id)
)
result = cursor.fetchone()
if not result:
# Insert the correct relationship
cursor.execute(
"INSERT INTO model_year_engine (model_id, year_id, engine_id) VALUES (?, ?, ?)",
(ew1_model_id, year_id, engine_id)
)
conn.commit()
print("Added correct ARRA EW-1 2024 Electric entry")
else:
print("Correct ARRA EW-1 2024 Electric entry already exists")
def main():
"""Main function to fix ARRA data."""
print("Fixing ARRA vehicle data...")
# Connect to database
conn = connect_db()
# Remove the incorrect entry
remove_incorrect_arr_entry(conn)
# Insert the correct entry
insert_correct_arr_entry(conn)
# Close connection
conn.close()
print("ARRA data fixed successfully!")
if __name__ == "__main__":
main()