Skip to content

Instantly share code, notes, and snippets.

@baran
Last active May 29, 2026 14:00
Show Gist options
  • Select an option

  • Save baran/5977d410a2edba24beb8d42eedccb5f0 to your computer and use it in GitHub Desktop.

Select an option

Save baran/5977d410a2edba24beb8d42eedccb5f0 to your computer and use it in GitHub Desktop.
db samples (Rent a car)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Rent A Car Database - Complete Setup
Faker gerektirmez, Python 3.6+ ile çalışır
"""
import os
import sys
import random
import traceback
from datetime import datetime, timedelta
RANDOM_SEED = 42
random.seed(RANDOM_SEED)
CONFIG = {
'total_customers': 350,
'total_vehicles': 3000,
'total_branches': 300,
'output_dir': 'rentacar-db'
}
EUROPEAN_COUNTRIES = [
('DE', 'Germany', '+49', 'EUR', 0.30), ('FR', 'France', '+33', 'EUR', 0.20),
('IT', 'Italy', '+39', 'EUR', 0.15), ('ES', 'Spain', '+34', 'EUR', 0.15),
('NL', 'Netherlands', '+31', 'EUR', 0.10), ('TR', 'Türkiye', '+90', 'TRY', 0.05),
('BE', 'Belgium', '+32', 'EUR', 0.02), ('AT', 'Austria', '+43', 'EUR', 0.02),
('CH', 'Switzerland', '+41', 'CHF', 0.01)
]
CITIES_BY_COUNTRY = {
'DE': ['Berlin', 'Munich', 'Hamburg', 'Frankfurt', 'Cologne', 'Stuttgart', 'Düsseldorf'],
'FR': ['Paris', 'Lyon', 'Marseille', 'Toulouse', 'Nice', 'Bordeaux', 'Strasbourg'],
'IT': ['Rome', 'Milan', 'Naples', 'Turin', 'Palermo', 'Florence', 'Bologna'],
'ES': ['Madrid', 'Barcelona', 'Valencia', 'Seville', 'Zaragoza', 'Málaga'],
'NL': ['Amsterdam', 'Rotterdam', 'The Hague', 'Utrecht', 'Eindhoven'],
'TR': ['İstanbul', 'Ankara', 'İzmir', 'Antalya', 'Bursa', 'Adana', 'Gaziantep'],
'BE': ['Brussels', 'Antwerp', 'Ghent', 'Charleroi'],
'AT': ['Vienna', 'Graz', 'Linz', 'Salzburg'],
'CH': ['Zurich', 'Geneva', 'Basel', 'Bern']
}
BRANCH_PREFIXES = ['Central', 'Airport', 'Downtown', 'West', 'East', 'North', 'South', 'Main']
VEHICLE_BRANDS = [('Toyota', 'JP'), ('Volkswagen', 'DE'), ('BMW', 'DE'), ('Mercedes-Benz', 'DE'), ('Audi', 'DE'), ('Ford', 'US'), ('Peugeot', 'FR'), ('Renault', 'FR'), ('Fiat', 'IT'), ('Volvo', 'SE'), ('Skoda', 'CZ'), ('Seat', 'ES'), ('Hyundai', 'KR'), ('Kia', 'KR'), ('Tesla', 'US'), ('Nissan', 'JP'), ('Honda', 'JP'), ('Citroen', 'FR'), ('Opel', 'DE'), ('Dacia', 'RO')]
MODELS = {
'SUV': [('Tiguan', 'VW', 45, 65), ('Q5', 'Audi', 80, 120), ('X5', 'BMW', 90, 140), ('GLC', 'Mercedes', 85, 130), ('RAV4', 'Toyota', 50, 75), ('Sportage', 'Kia', 40, 60), ('Tucson', 'Hyundai', 42, 62), ('Kuga', 'Ford', 40, 58), ('Captur', 'Renault', 35, 50), ('Duster', 'Dacia', 30, 45), ('XC60', 'Volvo', 70, 100), ('Model Y', 'Tesla', 75, 110)],
'Sedan': [('Passat', 'VW', 40, 60), ('A4', 'Audi', 60, 90), ('3 Series', 'BMW', 55, 85), ('C-Class', 'Mercedes', 60, 95), ('Camry', 'Toyota', 45, 70), ('Model 3', 'Tesla', 65, 95), ('Octavia', 'Skoda', 35, 50), ('508', 'Peugeot', 40, 60), ('Taliant', 'Renault', 30, 45), ('Egea', 'Fiat', 28, 42)],
'Hatchback': [('Golf', 'VW', 35, 50), ('A3', 'Audi', 50, 75), ('1 Series', 'BMW', 45, 68), ('A-Class', 'Mercedes', 48, 72), ('Corolla', 'Toyota', 32, 48), ('Clio', 'Renault', 25, 38), ('208', 'Peugeot', 26, 40), ('i20', 'Hyundai', 24, 36), ('Fabia', 'Skoda', 22, 34)]
}
COLORS = ['White', 'Black', 'Silver', 'Gray', 'Blue', 'Red', 'Green', 'Yellow', 'Brown', 'Orange']
TRANSMISSIONS = ['Automatic', 'Manual']
FIRST_NAMES = {
'TR': ['Ahmet', 'Mehmet', 'Ali', 'Ayşe', 'Fatma', 'Zeynep', 'Mustafa', 'Hüseyin', 'İbrahim', 'Osman', 'Murat', 'Ömer', 'Can', 'Cem', 'Burak', 'Kemal', 'Serkan', 'Yusuf', 'Sema', 'Elif', 'Merve', 'Sevgi', 'Yasemin'],
'DE': ['Hans', 'Peter', 'Michael', 'Wolfgang', 'Maria', 'Susanne', 'Petra', 'Monika', 'Ursula', 'Katrin'],
'FR': ['Jean', 'Pierre', 'Michel', 'André', 'Marie', 'Jeanne', 'Françoise', 'Monique', 'Catherine', 'Nathalie'],
'IT': ['Marco', 'Alessandro', 'Giuseppe', 'Luca', 'Anna', 'Maria', 'Laura', 'Giulia', 'Francesca', 'Rosa'],
'ES': ['Antonio', 'José', 'Manuel', 'Francisco', 'María', 'Carmen', 'Ana', 'Isabel', 'Dolores', 'Pilar'],
'NL': ['Jan', 'Peter', 'Hans', 'Willem', 'Maria', 'Anna', 'Johanna', 'Cornelia', 'Elisabeth', 'Wilhelmina'],
'BE': ['Jean', 'Michel', 'Philippe', 'Marie', 'Anne', 'Rita', 'Christiane', 'Monique', 'Carine', 'Nancy'],
'AT': ['Thomas', 'Wolfgang', 'Michael', 'Andreas', 'Maria', 'Elisabeth', 'Anna', 'Helga', 'Brigitte', 'Ursula'],
'CH': ['Hans', 'Peter', 'Walter', 'Rudolf', 'Ruth', 'Elisabeth', 'Marianne', 'Alice', 'Anna', 'Clara']
}
LAST_NAMES = {
'TR': ['Yılmaz', 'Kaya', 'Demir', 'Şahin', 'Çelik', 'Yıldız', 'Yıldırım', 'Öztürk', 'Aydın', 'Özdemir'],
'DE': ['Müller', 'Schmidt', 'Schneider', 'Fischer', 'Weber', 'Meyer', 'Wagner', 'Becker', 'Schulz', 'Hoffmann'],
'FR': ['Martin', 'Bernard', 'Thomas', 'Petit', 'Robert', 'Richard', 'Durand', 'Dubois', 'Moreau', 'Laurent'],
'IT': ['Rossi', 'Russo', 'Ferrari', 'Esposito', 'Bianchi', 'Romano', 'Colombo', 'Ricci', 'Marino', 'Greco'],
'ES': ['García', 'Rodríguez', 'González', 'Fernández', 'López', 'Martínez', 'Sánchez', 'Pérez', 'Gómez', 'Martín'],
'NL': ['De Jong', 'Jansen', 'De Vries', 'Van den Berg', 'Van Dijk', 'Bakker', 'Janssen', 'Visser', 'Smit', 'Meijer'],
'BE': ['Peeters', 'Janssens', 'Maes', 'Jacobs', 'Mertens', 'Willems', 'Claes', 'Goossens', 'Wouters', 'De Smet'],
'AT': ['Gruber', 'Huber', 'Bauer', 'Wagner', 'Müller', 'Pichler', 'Steiner', 'Moser', 'Mayer', 'Hofer'],
'CH': ['Müller', 'Meier', 'Schmid', 'Keller', 'Weber', 'Huber', 'Schneider', 'Fischer', 'Meyer', 'Brunner']
}
STREET_NAMES = ['Main Street', 'First Avenue', 'Park Road', 'High Street', 'Oak Lane', 'İstiklal Caddesi', 'Atatürk Bulvarı', 'Bahnhofstraße', 'Avenue des Champs-Élysées', 'Via Roma']
def create_directories():
print("📁 Dizinler oluşturuluyor...")
base = CONFIG['output_dir']
dirs = [base, f"{base}/init", f"{base}/seed_data"]
for d in dirs:
os.makedirs(d, exist_ok=True)
print(f" ✅ {d}")
def write_file(path, content):
full_path = os.path.join(CONFIG['output_dir'], path)
print(f"📝 {path} yazılıyor...")
with open(full_path, 'w', encoding='utf-8') as f:
f.write(content)
print(f" ✅ {os.path.getsize(full_path)} bytes")
def get_random_name(country_code, is_first=True):
if country_code not in FIRST_NAMES:
country_code = 'DE'
return random.choice(FIRST_NAMES[country_code] if is_first else LAST_NAMES[country_code])
def get_random_address():
return f"{random.choice(STREET_NAMES)} {random.randint(1, 200)}"
def generate_date(start_years_ago=5, end_years_ago=0):
end_date = datetime.now() - timedelta(days=365*end_years_ago)
start_date = datetime.now() - timedelta(days=365*start_years_ago)
days_between = (end_date - start_date).days
random_days = random.randint(0, days_between)
return (start_date + timedelta(days=random_days)).strftime('%Y-%m-%d')
def generate_dob(min_age=21, max_age=70):
today = datetime.now()
birth_year = today.year - random.randint(min_age, max_age)
return f"{birth_year}-{random.randint(1, 12):02d}-{random.randint(1, 28):02d}"
def escape_sql(val):
return str(val).replace("'", "''")
def generate_schema():
return """-- Complete Database Schema
CREATE TABLE IF NOT EXISTS countries (country_id SERIAL PRIMARY KEY, country_code CHAR(2) UNIQUE NOT NULL, country_name VARCHAR(100) NOT NULL, phone_prefix VARCHAR(5), currency_code CHAR(3));
CREATE TABLE IF NOT EXISTS cities (city_id SERIAL PRIMARY KEY, country_id INTEGER REFERENCES countries(country_id), city_name VARCHAR(100) NOT NULL, timezone VARCHAR(50));
CREATE TABLE IF NOT EXISTS branches (branch_id SERIAL PRIMARY KEY, branch_code VARCHAR(10) UNIQUE NOT NULL, branch_name VARCHAR(100) NOT NULL, city_id INTEGER REFERENCES cities(city_id), address TEXT, phone VARCHAR(20), email VARCHAR(100), opening_date DATE, is_active BOOLEAN DEFAULT true, capacity INTEGER);
CREATE TABLE IF NOT EXISTS vehicle_categories (category_id SERIAL PRIMARY KEY, category_name VARCHAR(50) NOT NULL, description TEXT);
CREATE TABLE IF NOT EXISTS fuel_types (fuel_type_id SERIAL PRIMARY KEY, fuel_type_name VARCHAR(50) NOT NULL, is_fossil BOOLEAN DEFAULT true);
CREATE TABLE IF NOT EXISTS vehicle_brands (brand_id SERIAL PRIMARY KEY, brand_name VARCHAR(50) NOT NULL, country_id INTEGER REFERENCES countries(country_id));
CREATE TABLE IF NOT EXISTS vehicle_models (model_id SERIAL PRIMARY KEY, brand_id INTEGER REFERENCES vehicle_brands(brand_id), model_name VARCHAR(50) NOT NULL, category_id INTEGER REFERENCES vehicle_categories(category_id), fuel_type_id INTEGER REFERENCES fuel_types(fuel_type_id), seat_count INTEGER DEFAULT 5, transmission_type VARCHAR(20), daily_rate_min DECIMAL(10,2), daily_rate_max DECIMAL(10,2));
CREATE TABLE IF NOT EXISTS vehicles (vehicle_id SERIAL PRIMARY KEY, license_plate VARCHAR(20) UNIQUE NOT NULL, model_id INTEGER REFERENCES vehicle_models(model_id), branch_id INTEGER REFERENCES branches(branch_id), manufacture_year INTEGER, color VARCHAR(30), mileage INTEGER DEFAULT 0, status VARCHAR(20) DEFAULT 'available', purchase_date DATE, daily_rate DECIMAL(10,2) NOT NULL, last_maintenance_date DATE, next_maintenance_date DATE);
CREATE TABLE IF NOT EXISTS customers (customer_id SERIAL PRIMARY KEY, first_name VARCHAR(50) NOT NULL, last_name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, phone VARCHAR(20), date_of_birth DATE, country_id INTEGER REFERENCES countries(country_id), city_id INTEGER REFERENCES cities(city_id), address TEXT, driver_license_number VARCHAR(50), license_issue_date DATE, license_class VARCHAR(10), registration_date DATE DEFAULT CURRENT_DATE, is_verified BOOLEAN DEFAULT false, credit_score INTEGER CHECK (credit_score BETWEEN 0 AND 1000));
CREATE TABLE IF NOT EXISTS rentals (rental_id SERIAL PRIMARY KEY, rental_code VARCHAR(20) UNIQUE NOT NULL, customer_id INTEGER REFERENCES customers(customer_id), vehicle_id INTEGER REFERENCES vehicles(vehicle_id), pickup_branch_id INTEGER REFERENCES branches(branch_id), return_branch_id INTEGER REFERENCES branches(branch_id), pickup_date TIMESTAMP NOT NULL, return_date TIMESTAMP NOT NULL, actual_return_date TIMESTAMP, status VARCHAR(20) DEFAULT 'confirmed', daily_rate DECIMAL(10,2) NOT NULL, total_days INTEGER GENERATED ALWAYS AS (EXTRACT(DAY FROM (return_date - pickup_date))) STORED, subtotal DECIMAL(10,2), discount_amount DECIMAL(10,2) DEFAULT 0, tax_amount DECIMAL(10,2), total_amount DECIMAL(10,2), mileage_start INTEGER, mileage_end INTEGER, fuel_level_start VARCHAR(20), fuel_level_end VARCHAR(20), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
CREATE TABLE IF NOT EXISTS payments (payment_id SERIAL PRIMARY KEY, rental_id INTEGER REFERENCES rentals(rental_id), payment_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, amount DECIMAL(10,2) NOT NULL, payment_method VARCHAR(30), transaction_id VARCHAR(100), status VARCHAR(20) DEFAULT 'completed', currency_code CHAR(3) DEFAULT 'EUR');
CREATE TABLE IF NOT EXISTS insurance_policies (policy_id SERIAL PRIMARY KEY, policy_name VARCHAR(100), coverage_type VARCHAR(50), daily_cost DECIMAL(10,2), max_coverage_amount DECIMAL(12,2));
CREATE TABLE IF NOT EXISTS rental_insurances (rental_id INTEGER REFERENCES rentals(rental_id), policy_id INTEGER REFERENCES insurance_policies(policy_id), PRIMARY KEY (rental_id, policy_id));
CREATE INDEX idx_vehicles_branch ON vehicles(branch_id); CREATE INDEX idx_vehicles_status ON vehicles(status); CREATE INDEX idx_customers_country ON customers(country_id); CREATE INDEX idx_rentals_customer ON rentals(customer_id); CREATE INDEX idx_rentals_dates ON rentals(pickup_date, return_date);"""
def generate_docker_compose():
return """version: '3.8'
services:
postgres:
image: postgres:15-alpine
container_name: rentacar_db
environment:
POSTGRES_DB: rentacar
POSTGRES_USER: admin
POSTGRES_PASSWORD: RentAcar2024!
PGDATA: /var/lib/postgresql/data/pgdata
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
- ./init:/docker-entrypoint-initdb.d
- ./seed_data:/seed_data
networks:
- rentacar_network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U admin -d rentacar"]
interval: 10s
timeout: 5s
retries: 5
pgadmin:
image: dpage/pgadmin4:latest
container_name: rentacar_pgadmin
environment:
PGADMIN_DEFAULT_EMAIL: admin@rentacar.com
PGADMIN_DEFAULT_PASSWORD: admin123
PGADMIN_CONFIG_SERVER_MODE: 'False'
ports:
- "8080:80"
volumes:
- pgadmin_data:/var/lib/pgadmin
networks:
- rentacar_network
depends_on:
- postgres
networks:
rentacar_network:
driver: bridge
volumes:
postgres_data:
pgadmin_data:"""
def main():
print(f"🚀 Python {sys.version}")
print("📦 Standart kütüphane kullanılıyor (Faker yok)")
try:
create_directories()
# Ülkeler
countries = [(i+1, code, name, prefix, currency) for i, (code, name, prefix, currency, _) in enumerate(EUROPEAN_COUNTRIES)]
vals = [f"({c[0]}, '{c[1]}', '{c[2]}', '{c[3]}', '{c[4]}')" for c in countries]
write_file("seed_data/01_countries.sql", "INSERT INTO countries (country_id, country_code, country_name, phone_prefix, currency_code) VALUES\n" + ",\n".join(vals) + ";\n")
# Şehirler
cities = []
city_id = 1
for country_id, (code, _, _, _, _) in enumerate(EUROPEAN_COUNTRIES, 1):
for city_name in CITIES_BY_COUNTRY[code]:
cities.append((city_id, country_id, city_name, 'Europe/' + code))
city_id += 1
vals = [f"({c[0]}, {c[1]}, '{c[2]}', '{c[3]}')" for c in cities]
write_file("seed_data/02_cities.sql", "INSERT INTO cities (city_id, country_id, city_name, timezone) VALUES\n" + ",\n".join(vals) + ";\n")
country_code_map = {i+1: code for i, (code, _, _, _, _) in enumerate(EUROPEAN_COUNTRIES)}
# Şubeler
print(f"🏢 {CONFIG['total_branches']} şube oluşturuluyor...")
branches = []
used_names = set()
for i in range(1, CONFIG['total_branches'] + 1):
city = random.choice(cities)
country_code = country_code_map[city[1]]
prefix = random.choice(BRANCH_PREFIXES)
name = f"{prefix} {city[2]}"
counter = 1
while name in used_names:
name = f"{prefix} {city[2]} {counter}"
counter += 1
used_names.add(name)
code = f"BR{str(i).zfill(4)}"
address = escape_sql(get_random_address())
phone = f"+{random.randint(1,99)} {random.randint(100000000, 999999999)}"
email = f"{name.lower().replace(' ', '.')}@rentacar.com"
opening = generate_date(10, 1)
capacity = random.randint(20, 100)
branches.append(f"({i}, '{code}', '{escape_sql(name)}', {city[0]}, '{address}', '{phone}', '{email}', '{opening}', true, {capacity})")
write_file("seed_data/03_branches.sql", "INSERT INTO branches (branch_id, branch_code, branch_name, city_id, address, phone, email, opening_date, is_active, capacity) VALUES\n" + ",\n".join(branches) + ";\n")
# Fuel & Categories
write_file("seed_data/04_fuel_types.sql", "INSERT INTO fuel_types (fuel_type_id, fuel_type_name, is_fossil) VALUES (1, 'Gasoline', true), (2, 'Diesel', true), (3, 'Electric', false), (4, 'Hybrid', false);\n")
write_file("seed_data/05_categories.sql", "INSERT INTO vehicle_categories (category_id, category_name) VALUES (1, 'SUV'), (2, 'Sedan'), (3, 'Hatchback');\n")
# Brands
country_map = {code: i+1 for i, (code, _, _, _, _) in enumerate(EUROPEAN_COUNTRIES)}
brands = [(i, name, country_map.get(cc, 1)) for i, (name, cc) in enumerate(VEHICLE_BRANDS, 1)]
vals = [f"({b[0]}, '{b[1]}', {b[2]})" for b in brands]
write_file("seed_data/06_brands.sql", "INSERT INTO vehicle_brands (brand_id, brand_name, country_id) VALUES\n" + ",\n".join(vals) + ";\n")
# Models
print("🚗 Modeller oluşturuluyor...")
models = []
model_id = 1
brand_map = {name: i for i, (name, _) in enumerate(VEHICLE_BRANDS, 1)}
cat_map = {'SUV': 1, 'Sedan': 2, 'Hatchback': 3}
for cat, mlist in MODELS.items():
for mname, bname, minr, maxr in mlist:
bid = brand_map.get(bname, 1)
cid = cat_map[cat]
fid = 3 if 'Tesla' in bname else (1 if random.random() < 0.6 else 2)
seats = 5 if cat != 'SUV' else random.choice([5, 7])
trans = random.choice(TRANSMISSIONS)
models.append(f"({model_id}, {bid}, '{mname}', {cid}, {fid}, {seats}, '{trans}', {minr}, {maxr})")
model_id += 1
write_file("seed_data/07_models.sql", "INSERT INTO vehicle_models (model_id, brand_id, model_name, category_id, fuel_type_id, seat_count, transmission_type, daily_rate_min, daily_rate_max) VALUES\n" + ",\n".join(models) + ";\n")
# Vehicles
print(f"🚙 {CONFIG['total_vehicles']} araç oluşturuluyor...")
model_list = list(range(1, model_id))
used_plates = set()
batch_size = 500
for batch in range(0, CONFIG['total_vehicles'], batch_size):
vehicles = []
for i in range(batch + 1, min(batch + batch_size, CONFIG['total_vehicles']) + 1):
mid = random.choice(model_list)
bid = random.randint(1, 300)
plate = f"{random.choice('ABCDEFGHIJKLMNOPQRSTUVWXYZ')}{random.randint(10000, 99999)}"
while plate in used_plates:
plate = f"{random.choice('ABCDEFGHIJKLMNOPQRSTUVWXYZ')}{random.randint(10000, 99999)}"
used_plates.add(plate)
year = random.randint(2019, 2024)
color = random.choice(COLORS)
mile = random.randint(0, 150000)
status = random.choices(['available', 'rented', 'maintenance', 'retired'], weights=[70, 20, 8, 2])[0]
purch = generate_date(2024-year+1, 2024-year)
rate = round(random.uniform(20, 150), 2)
last = generate_date(1, 0)
last_date = datetime.strptime(last, '%Y-%m-%d')
next_m = (last_date + timedelta(days=180)).strftime('%Y-%m-%d')
vehicles.append(f"({i}, '{plate}', {mid}, {bid}, {year}, '{color}', {mile}, '{status}', '{purch}', {rate}, '{last}', '{next_m}')")
write_file(f"seed_data/08_vehicles_{batch//batch_size + 1}.sql", "INSERT INTO vehicles (vehicle_id, license_plate, model_id, branch_id, manufacture_year, color, mileage, status, purchase_date, daily_rate, last_maintenance_date, next_maintenance_date) VALUES\n" + ",\n".join(vehicles) + ";\n")
# Customers
print(f"👥 {CONFIG['total_customers']} müşteri oluşturuluyor...")
tr_cities = [c for c in cities if c[1] == 6]
other_cities = [c for c in cities if c[1] != 6]
customers = []
for i in range(1, CONFIG['total_customers'] + 1):
if random.random() < 0.15:
city = random.choice(tr_cities)
country_code = 'TR'
else:
city = random.choice(other_cities)
country_code = country_code_map[city[1]]
fname = escape_sql(get_random_name(country_code, True))
lname = escape_sql(get_random_name(country_code, False))
email = f"{fname.lower()}.{lname.lower()}{random.randint(1,999)}@example.com"
phone = f"+{random.randint(1,99)}-{random.randint(100000000, 999999999)}"
dob = generate_dob(21, 70)
addr = escape_sql(get_random_address())
lic = f"DL{random.randint(10000000, 99999999)}"
birth_year = int(dob.split('-')[0])
lic_year = birth_year + 18 + random.randint(0, 30)
lic_date = f"{lic_year}-{random.randint(1, 12):02d}-{random.randint(1, 28):02d}"
lic_class = random.choice(['B', 'B1', 'BE'])
reg = generate_date(5, 0)
verified = random.random() < 0.9
score = random.randint(300, 850) if verified else random.randint(100, 500)
customers.append(f"({i}, '{fname}', '{lname}', '{email}', '{phone}', '{dob}', {city[1]}, {city[0]}, '{addr}', '{lic}', '{lic_date}', '{lic_class}', '{reg}', {verified}, {score})")
write_file("seed_data/09_customers.sql", "INSERT INTO customers (customer_id, first_name, last_name, email, phone, date_of_birth, country_id, city_id, address, driver_license_number, license_issue_date, license_class, registration_date, is_verified, credit_score) VALUES\n" + ",\n".join(customers) + ";\n")
# Loader
loader = """\\i /seed_data/01_countries.sql
\\i /seed_data/02_cities.sql
\\i /seed_data/03_branches.sql
\\i /seed_data/04_fuel_types.sql
\\i /seed_data/05_categories.sql
\\i /seed_data/06_brands.sql
\\i /seed_data/07_models.sql
\\i /seed_data/08_vehicles_1.sql
\\i /seed_data/08_vehicles_2.sql
\\i /seed_data/08_vehicles_3.sql
\\i /seed_data/08_vehicles_4.sql
\\i /seed_data/08_vehicles_5.sql
\\i /seed_data/08_vehicles_6.sql
\\i /seed_data/09_customers.sql
INSERT INTO insurance_policies (policy_id, policy_name, coverage_type, daily_cost, max_coverage_amount) VALUES (1, 'Basic Coverage', 'basic', 15.00, 50000.00), (2, 'Full Protection', 'full', 35.00, 150000.00), (3, 'Premium Plus', 'premium', 55.00, 300000.00);"""
write_file("init/02-seed-loader.sql", loader)
# Schema & Docker Compose
write_file("init/01-schema.sql", generate_schema())
write_file("docker-compose.yml", generate_docker_compose())
print("\n✅ Tüm dosyalar oluşturuldu!")
print(f"📂 Çıktı dizini: {CONFIG['output_dir']}/")
except Exception as e:
print(f"\n❌ Hata: {e}")
traceback.print_exc()
sys.exit(1)
if __name__ == "__main__":
main()
@baran

baran commented May 15, 2026

Copy link
Copy Markdown
Author
  • setup.py dosyasının oluşturulduğu dizinde terminal üzerinden python3 setup.py çalıştırılacak.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment