Files
Autoparts-DB/fix_arra_data.py
consultoria-as f395d67136 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
2026-01-19 08:45:03 +00:00

180 lines
5.3 KiB
Python

"""
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()