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:
445
add_aston_martin_data.py
Normal file
445
add_aston_martin_data.py
Normal file
@@ -0,0 +1,445 @@
|
||||
"""
|
||||
Script to add Aston Martin vehicle data to the database.
|
||||
This includes inserting the brand, models, and year/motor combinations.
|
||||
"""
|
||||
import sqlite3
|
||||
from typing import List, Tuple
|
||||
|
||||
|
||||
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 insert_version_relationship(conn: sqlite3.Connection, model_id: int, year_id: int, engine_id: int) -> None:
|
||||
"""Insert a version relationship if it doesn't exist."""
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Check if version relationship already exists
|
||||
cursor.execute(
|
||||
"SELECT id FROM model_year_engine WHERE model_id = ? AND year_id = ? AND engine_id = ?",
|
||||
(model_id, year_id, engine_id)
|
||||
)
|
||||
result = cursor.fetchone()
|
||||
|
||||
if not result:
|
||||
# Insert new version relationship
|
||||
cursor.execute(
|
||||
"INSERT INTO model_year_engine (model_id, year_id, engine_id) VALUES (?, ?, ?)",
|
||||
(model_id, year_id, engine_id)
|
||||
)
|
||||
conn.commit()
|
||||
|
||||
|
||||
def main():
|
||||
"""Main function to add Aston Martin data."""
|
||||
print("Adding Aston Martin data...")
|
||||
|
||||
# Connect to database
|
||||
conn = connect_db()
|
||||
|
||||
# Insert brand
|
||||
brand_id = get_or_insert_brand(conn, "ASTON MARTIN")
|
||||
print(f"Brand 'ASTON MARTIN' inserted with ID: {brand_id}")
|
||||
|
||||
# Define models
|
||||
models = [
|
||||
'LAGONDA',
|
||||
'ZAGATO',
|
||||
'DB7',
|
||||
'VANTAGE',
|
||||
'VIRAGE',
|
||||
'VANQUISH',
|
||||
'DB9',
|
||||
'DBS',
|
||||
'RAPIDE',
|
||||
'ONE-77',
|
||||
'V12 VANTAGE',
|
||||
'DB11',
|
||||
'DBX',
|
||||
'DB12',
|
||||
'VALHALLA',
|
||||
'VALOUR',
|
||||
'ARRA'
|
||||
]
|
||||
|
||||
# Insert models
|
||||
for model_name in models:
|
||||
model_id = get_or_insert_model(conn, brand_id, model_name)
|
||||
print(f"Models inserted for ASTON MARTIN: {', '.join(models)}")
|
||||
|
||||
# Define versions (model, year, engine)
|
||||
versions = [
|
||||
# 2025
|
||||
('DB12', 2025, '4.0L V8 Turbocharged'),
|
||||
('DBX707', 2025, '4.0L V8 Turbocharged'),
|
||||
('VALHALLA', 2025, '4.0L V8 ELECTRIC/GAS Turbocharged'),
|
||||
('VANQUISH', 2025, '5.2L V12 Turbocharged'),
|
||||
('VANTAGE', 2025, '4.0L V8 Turbocharged'),
|
||||
('VANTAGE', 2025, '5.2L V12 Turbocharged'),
|
||||
|
||||
# 2024
|
||||
('DB12', 2024, '4.0L V8 Turbocharged'),
|
||||
('DBS', 2024, '5.2L V12 Turbocharged'),
|
||||
('DBX', 2024, '4.0L V8 Turbocharged'),
|
||||
('DBX707', 2024, '4.0L V8 Turbocharged'),
|
||||
('VALOUR', 2024, '5.2L V12 Turbocharged'),
|
||||
('VANTAGE', 2024, '4.0L V8 Turbocharged'),
|
||||
('VANTAGE', 2024, '5.2L V12 Turbocharged'),
|
||||
|
||||
# 2023
|
||||
('DB11', 2023, '4.0L V8 Turbocharged'),
|
||||
('DBS', 2023, '5.2L V12 Turbocharged'),
|
||||
('DBX', 2023, '4.0L V8 Turbocharged'),
|
||||
('DBX707', 2023, '4.0L V8 Turbocharged'),
|
||||
('VANTAGE', 2023, '4.0L V8 Turbocharged'),
|
||||
('VANTAGE', 2023, '5.2L V12 Turbocharged'),
|
||||
|
||||
# 2022
|
||||
('DB11', 2022, '4.0L V8 Turbocharged'),
|
||||
('DBS', 2022, '5.2L V12 Turbocharged'),
|
||||
('DBX', 2022, '4.0L V8 Turbocharged'),
|
||||
('VANTAGE', 2022, '4.0L V8 Turbocharged'),
|
||||
('VANTAGE', 2022, '5.2L V12 Turbocharged'),
|
||||
|
||||
# 2021
|
||||
('DB11', 2021, '4.0L V8 Turbocharged'),
|
||||
('DBS', 2021, '5.2L V12 Turbocharged'),
|
||||
('DBX', 2021, '4.0L V8 Turbocharged'),
|
||||
('VANTAGE', 2021, '4.0L V8 Turbocharged'),
|
||||
('VANTAGE', 2021, '5.2L V12 Turbocharged'),
|
||||
|
||||
# 2020
|
||||
('DB11', 2020, '4.0L V8 Turbocharged'),
|
||||
('DBS', 2020, '5.2L V12 Turbocharged'),
|
||||
('VANTAGE', 2020, '4.0L V8 Turbocharged'),
|
||||
('VANTAGE', 2020, '5.2L V12 Turbocharged'),
|
||||
|
||||
# 2019
|
||||
('DB11', 2019, '4.0L V8 Turbocharged'),
|
||||
('DBS', 2019, '5.2L V12 Turbocharged'),
|
||||
('RAPIDE', 2019, '4.0L V8 Turbocharged'),
|
||||
('VANTAGE', 2019, '4.0L V8 Turbocharged'),
|
||||
|
||||
# 2018
|
||||
('DB11', 2018, '4.0L V8 Turbocharged'),
|
||||
('RAPIDE', 2018, '4.0L V8 Turbocharged'),
|
||||
('VANTAGE', 2018, '4.0L V8 Turbocharged'),
|
||||
|
||||
# 2017
|
||||
('DB11', 2017, '5.2L V12 Turbocharged'),
|
||||
('RAPIDE', 2017, '6.0L V12'),
|
||||
('V12 VANTAGE', 2017, '6.0L V12'),
|
||||
('V8 VANTAGE', 2017, '4.7L V8'),
|
||||
('VANQUISH', 2017, '6.0L V12'),
|
||||
|
||||
# 2016
|
||||
('DB9', 2016, '6.0L V12'),
|
||||
('RAPIDE', 2016, '6.0L V12'),
|
||||
('V12 VANTAGE', 2016, '6.0L V12'),
|
||||
('V8 VANTAGE', 2016, '4.7L V8'),
|
||||
('VANQUISH', 2016, '6.0L V12'),
|
||||
|
||||
# 2015
|
||||
('DB9', 2015, '6.0L V12'),
|
||||
('RAPIDE', 2015, '6.0L V12'),
|
||||
('V12 VANTAGE', 2015, '6.0L V12'),
|
||||
('V8 VANTAGE', 2015, '4.7L V8'),
|
||||
('VANQUISH', 2015, '6.0L V12'),
|
||||
|
||||
# 2014
|
||||
('DB9', 2014, '6.0L V12'),
|
||||
('RAPIDE', 2014, '6.0L V12'),
|
||||
('V12 VANTAGE', 2014, '6.0L V12'),
|
||||
('V8 VANTAGE', 2014, '4.7L V8'),
|
||||
('VANQUISH', 2014, '6.0L V12'),
|
||||
|
||||
# 2013
|
||||
('DB9', 2013, '6.0L V12'),
|
||||
('DBS', 2013, '6.0L V12'),
|
||||
('RAPIDE', 2013, '6.0L V12'),
|
||||
('V12 VANTAGE', 2013, '6.0L V12'),
|
||||
('V8 VANTAGE', 2013, '4.7L V8'),
|
||||
('VANQUISH', 2013, '6.0L V12'),
|
||||
|
||||
# 2012
|
||||
('DB9', 2012, '6.0L V12'),
|
||||
('DBS', 2012, '6.0L V12'),
|
||||
('RAPIDE', 2012, '6.0L V12'),
|
||||
('V12 VANTAGE', 2012, '6.0L V12'),
|
||||
('V8 VANTAGE', 2012, '4.7L V8'),
|
||||
('VANQUISH', 2012, '6.0L V12'),
|
||||
|
||||
# 2011
|
||||
('DB9', 2011, '6.0L V12'),
|
||||
('DBS', 2011, '6.0L V12'),
|
||||
('ONE-77', 2011, '7.3L V12'),
|
||||
('RAPIDE', 2011, '6.0L V12'),
|
||||
('V12 VANTAGE', 2011, '6.0L V12'),
|
||||
('V8 VANTAGE', 2011, '4.7L V8'),
|
||||
('VANQUISH', 2011, '6.0L V12'),
|
||||
|
||||
# 2010
|
||||
('DB9', 2010, '6.0L V12'),
|
||||
('DBS', 2010, '6.0L V12'),
|
||||
('RAPIDE', 2010, '6.0L V12'),
|
||||
('V12 VANTAGE', 2010, '6.0L V12'),
|
||||
('V8 VANTAGE', 2010, '4.7L V8'),
|
||||
('VANQUISH', 2010, '6.0L V12'),
|
||||
|
||||
# 2009
|
||||
('DB9', 2009, '6.0L V12'),
|
||||
('DBS', 2009, '6.0L V12'),
|
||||
('V12 VANTAGE', 2009, '6.0L V12'),
|
||||
('V8 VANTAGE', 2009, '4.3L V8'),
|
||||
('V8 VANTAGE', 2009, '4.7L V8'),
|
||||
('VANQUISH', 2009, '6.0L V12'),
|
||||
|
||||
# 2008
|
||||
('DB9', 2008, '6.0L V12'),
|
||||
('DBS', 2008, '6.0L V12'),
|
||||
('V12 VANTAGE', 2008, '6.0L V12'),
|
||||
('V8 VANTAGE', 2008, '4.3L V8'),
|
||||
('V8 VANTAGE', 2008, '4.7L V8'),
|
||||
('VANQUISH', 2008, '6.0L V12'),
|
||||
|
||||
# 2007
|
||||
('DB9', 2007, '6.0L V12'),
|
||||
('V12 VANTAGE', 2007, '6.0L V12'),
|
||||
('V8 VANTAGE', 2007, '4.3L V8'),
|
||||
('VANQUISH', 2007, '6.0L V12'),
|
||||
|
||||
# 2006
|
||||
('DB9', 2006, '6.0L V12'),
|
||||
('V12 VANTAGE', 2006, '6.0L V12'),
|
||||
('V8 VANTAGE', 2006, '4.3L V8'),
|
||||
('VANQUISH', 2006, '6.0L V12'),
|
||||
|
||||
# 2005
|
||||
('DB7', 2005, '5.9L V12'),
|
||||
('DB9', 2005, '6.0L V12'),
|
||||
('VANQUISH', 2005, '6.0L V12'),
|
||||
|
||||
# 2004
|
||||
('DB7', 2004, '5.9L V12'),
|
||||
('DB9', 2004, '6.0L V12'),
|
||||
('VANQUISH', 2004, '6.0L V12'),
|
||||
|
||||
# 2003
|
||||
('DB7', 2003, '5.9L V12'),
|
||||
('DB9', 2003, '6.0L V12'),
|
||||
('VANQUISH', 2003, '6.0L V12'),
|
||||
|
||||
# 2002
|
||||
('DB7', 2002, '5.9L V12'),
|
||||
('VANQUISH', 2002, '6.0L V12'),
|
||||
|
||||
# 2001
|
||||
('DB7', 2001, '5.9L V12'),
|
||||
('VANQUISH', 2001, '6.0L V12'),
|
||||
|
||||
# 2000
|
||||
('DB7', 2000, '3.2L L6 Supercharged'),
|
||||
('DB7', 2000, '5.9L V12'),
|
||||
('VANQUISH', 2000, '6.0L V12'),
|
||||
|
||||
# 1999
|
||||
('DB7', 1999, '3.2L L6 Supercharged'),
|
||||
('DB7', 1999, '5.9L V12'),
|
||||
|
||||
# 1998
|
||||
('DB7', 1998, '3.2L L6 Supercharged'),
|
||||
('DB7', 1998, '5.9L V12'),
|
||||
|
||||
# 1997
|
||||
('DB7', 1997, '3.2L L6 Supercharged'),
|
||||
('DB7', 1997, '5.9L V12'),
|
||||
|
||||
# 1995
|
||||
('VIRAGE', 1995, '5.3L V8'),
|
||||
|
||||
# 1994
|
||||
('VIRAGE', 1994, '5.3L V8'),
|
||||
|
||||
# 1993
|
||||
('VIRAGE', 1993, '5.3L V8'),
|
||||
|
||||
# 1992
|
||||
('VIRAGE', 1992, '5.3L V8'),
|
||||
|
||||
# 1991
|
||||
('VIRAGE', 1991, '5.3L V8'),
|
||||
|
||||
# 1990
|
||||
('VIRAGE', 1990, '5.3L V8'),
|
||||
|
||||
# 1989
|
||||
('LAGONDA', 1989, '5.3L V8'),
|
||||
('VIRAGE', 1989, '5.3L V8'),
|
||||
|
||||
# 1988
|
||||
('LAGONDA', 1988, '5.3L V8'),
|
||||
('VIRAGE', 1988, '5.3L V8'),
|
||||
('ZAGATO', 1988, '5.3L V8'),
|
||||
|
||||
# 1987
|
||||
('LAGONDA', 1987, '5.3L V8'),
|
||||
('VIRAGE', 1987, '5.3L V8'),
|
||||
('ZAGATO', 1987, '5.3L V8'),
|
||||
|
||||
# 1986
|
||||
('LAGONDA', 1986, '5.3L V8'),
|
||||
('VIRAGE', 1986, '5.3L V8'),
|
||||
('ZAGATO', 1986, '5.3L V8'),
|
||||
|
||||
# 1985
|
||||
('LAGONDA', 1985, '5.3L V8'),
|
||||
('VIRAGE', 1985, '5.3L V8'),
|
||||
('ZAGATO', 1985, '5.3L V8'),
|
||||
|
||||
# 1984
|
||||
('LAGONDA', 1984, '5.3L V8'),
|
||||
('VIRAGE', 1984, '5.3L V8'),
|
||||
('ZAGATO', 1984, '5.3L V8'),
|
||||
|
||||
# 1983
|
||||
('LAGONDA', 1983, '5.3L V8'),
|
||||
('VIRAGE', 1983, '5.3L V8'),
|
||||
('ZAGATO', 1983, '5.3L V8'),
|
||||
|
||||
# 1982
|
||||
('LAGONDA', 1982, '5.3L V8'),
|
||||
('VIRAGE', 1982, '5.3L V8'),
|
||||
('ZAGATO', 1982, '5.3L V8'),
|
||||
|
||||
# 1981
|
||||
('LAGONDA', 1981, '5.3L V8'),
|
||||
('VIRAGE', 1981, '5.3L V8'),
|
||||
('ZAGATO', 1981, '5.3L V8'),
|
||||
|
||||
# 1980
|
||||
('LAGONDA', 1980, '5.3L V8'),
|
||||
('VIRAGE', 1980, '5.3L V8'),
|
||||
('ZAGATO', 1980, '5.3L V8'),
|
||||
|
||||
# 1979
|
||||
('LAGONDA', 1979, '5.3L V8'),
|
||||
('VIRAGE', 1979, '5.3L V8'),
|
||||
('ZAGATO', 1979, '5.3L V8'),
|
||||
|
||||
# 1978
|
||||
('LAGONDA', 1978, '5.3L V8'),
|
||||
('VIRAGE', 1978, '5.3L V8'),
|
||||
('ZAGATO', 1978, '5.3L V8'),
|
||||
|
||||
# 1977
|
||||
('LAGONDA', 1977, '5.3L V8'),
|
||||
('VIRAGE', 1977, '5.3L V8'),
|
||||
('ZAGATO', 1977, '5.3L V8'),
|
||||
|
||||
# 1976
|
||||
('LAGONDA', 1976, '5.3L V8'),
|
||||
('VIRAGE', 1976, '5.3L V8'),
|
||||
('ZAGATO', 1976, '5.3L V8'),
|
||||
|
||||
# 1975
|
||||
('LAGONDA', 1975, '5.3L V8'),
|
||||
('VIRAGE', 1975, '5.3L V8'),
|
||||
('ZAGATO', 1975, '5.3L V8'),
|
||||
|
||||
# ARRA (modelo italiano)
|
||||
('ARRA', 2024, 'ELECTRIC')
|
||||
]
|
||||
|
||||
# Insert version relationships
|
||||
for model_name, year, engine in versions:
|
||||
model_id = get_or_insert_model(conn, brand_id, model_name)
|
||||
year_id = get_or_insert_year(conn, year)
|
||||
engine_id = get_or_insert_engine(conn, engine)
|
||||
insert_version_relationship(conn, model_id, year_id, engine_id)
|
||||
|
||||
print(f"Inserted {len(versions)} version relationships for ASTON MARTIN vehicles")
|
||||
|
||||
# Close connection
|
||||
conn.close()
|
||||
print("Aston Martin data added successfully!")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user