Files
Autoparts-DB/vehicle_database/scripts/csv_importer.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

152 lines
6.7 KiB
Python

#!/usr/bin/env python3
"""
CSV Import Script for Vehicle Database
This script allows importing vehicle data from CSV files
"""
import csv
import sqlite3
import os
from typing import Dict, List
class CSVImporter:
def __init__(self, db_path: str = "vehicle_database.db"):
self.db_path = db_path
def import_brands_from_csv(self, csv_file: str):
"""Import brands from a CSV file"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
with open(csv_file, 'r', newline='', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
cursor.execute(
"INSERT OR IGNORE INTO brands (name, country, founded_year) VALUES (?, ?, ?)",
(row['name'], row.get('country'), row.get('founded_year'))
)
conn.commit()
conn.close()
print(f"Imported brands from {csv_file}")
def import_engines_from_csv(self, csv_file: str):
"""Import engines from a CSV file"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
with open(csv_file, 'r', newline='', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
cursor.execute(
"""INSERT OR IGNORE INTO engines
(name, displacement_cc, cylinders, fuel_type, power_hp, torque_nm, engine_code)
VALUES (?, ?, ?, ?, ?, ?, ?)""",
(
row['name'],
row.get('displacement_cc'),
row.get('cylinders'),
row.get('fuel_type'),
row.get('power_hp'),
row.get('torque_nm'),
row.get('engine_code')
)
)
conn.commit()
conn.close()
print(f"Imported engines from {csv_file}")
def import_models_from_csv(self, csv_file: str):
"""Import models from a CSV file"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
with open(csv_file, 'r', newline='', encoding='utf-8') as file:
reader = csv.DictReader(file)
# First, create a mapping of brand names to IDs
cursor.execute("SELECT id, name FROM brands")
brand_map = {row[1]: row[0] for row in cursor.fetchall()}
for row in reader:
brand_id = brand_map.get(row['brand_name'])
if brand_id is None:
print(f"Warning: Brand '{row['brand_name']}' not found in database")
continue
cursor.execute(
"""INSERT OR IGNORE INTO models
(brand_id, name, body_type, generation, production_start_year, production_end_year)
VALUES (?, ?, ?, ?, ?, ?)""",
(
brand_id,
row['name'],
row.get('body_type'),
row.get('generation'),
row.get('production_start_year'),
row.get('production_end_year')
)
)
conn.commit()
conn.close()
print(f"Imported models from {csv_file}")
def create_sample_csv_files(self):
"""Create sample CSV files with example data"""
os.makedirs("data", exist_ok=True)
# Sample brands CSV
with open("data/brands.csv", "w", newline="", encoding="utf-8") as csvfile:
fieldnames = ["name", "country", "founded_year"]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerows([
{"name": "Mercedes-Benz", "country": "Germany", "founded_year": 1926},
{"name": "Audi", "country": "Germany", "founded_year": 1909},
{"name": "Nissan", "country": "Japan", "founded_year": 1933},
{"name": "Chevrolet", "country": "USA", "founded_year": 1911},
{"name": "Volkswagen", "country": "Germany", "founded_year": 1937}
])
# Sample engines CSV
with open("data/engines.csv", "w", newline="", encoding="utf-8") as csvfile:
fieldnames = ["name", "displacement_cc", "cylinders", "fuel_type", "power_hp", "torque_nm", "engine_code"]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerows([
{"name": "VQ35DE", "displacement_cc": 3500, "cylinders": 6, "fuel_type": "gasoline", "power_hp": 280, "torque_nm": 260, "engine_code": "VQ35DE"},
{"name": "LS3", "displacement_cc": 6200, "cylinders": 8, "fuel_type": "gasoline", "power_hp": 430, "torque_nm": 424, "engine_code": "LS3"},
{"name": "EA888", "displacement_cc": 2000, "cylinders": 4, "fuel_type": "gasoline", "power_hp": 228, "torque_nm": 258, "engine_code": "EA888"},
{"name": "M274", "displacement_cc": 2000, "cylinders": 4, "fuel_type": "gasoline", "power_hp": 241, "torque_nm": 273, "engine_code": "M274"}
])
# Sample models CSV
with open("data/models.csv", "w", newline="", encoding="utf-8") as csvfile:
fieldnames = ["brand_name", "name", "body_type", "generation", "production_start_year", "production_end_year"]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerows([
{"brand_name": "Toyota", "name": "Corolla", "body_type": "sedan", "generation": "E210", "production_start_year": 2018, "production_end_year": None},
{"brand_name": "Honda", "name": "Accord", "body_type": "sedan", "generation": "X", "production_start_year": 2018, "production_end_year": None},
{"brand_name": "Ford", "name": "F-150", "body_type": "truck", "generation": "13th Gen", "production_start_year": 2015, "production_end_year": None},
{"brand_name": "BMW", "name": "3 Series", "body_type": "sedan", "generation": "G20", "production_start_year": 2018, "production_end_year": None}
])
print("Sample CSV files created in data/ directory")
def main():
importer = CSVImporter()
# Create sample CSV files
importer.create_sample_csv_files()
# Import sample data (these would be imported by the main script, but showing the functionality)
print("CSV import functionality created. Sample CSV files are in the data/ directory.")
if __name__ == "__main__":
main()