#!/usr/bin/env python3 """ Script to generate fake sales order data for PostgreSQL Generates approximately 1GB of data """ import psycopg2 import random from datetime import datetime, timedelta import uuid import sys import os # Database connection details DB_HOST = "10.0.21.51" DB_PORT = "5432" DB_NAME = "postgres" DB_USER = "mo" DB_PASSWORD = "Dell2026!" # Data generation settings TARGET_ROWS = int(os.getenv("GEN_ROWS", "5000")) # light, configurable via GEN_ROWS BATCH_SIZE = min(10000, max(500, TARGET_ROWS)) # Sample data REGIONS = ["EU", "APAC", "LATAM", "NA", "EMEA"] SALES_CHANNELS = ["STORE", "ONLINE", "MOBILE", "B2B"] CURRENCIES = ["EUR", "USD", "GBP", "JPY", "CNY"] ORDER_STATUSES = ["SHIPPED", "PENDING", "CANCELLED", "RETURNED", "DELIVERED"] def generate_fake_order(): """Generate a single fake sales order""" customer_id = random.randint(1, 100000) product_id = random.randint(1, 5000) region = random.choice(REGIONS) sales_channel = random.choice(SALES_CHANNELS) # Random timestamp within the last 2 years days_ago = random.randint(0, 730) order_ts = datetime.now() - timedelta(days=days_ago, hours=random.randint(0, 23), minutes=random.randint(0, 59)) amount = round(random.uniform(10.0, 10000.0), 2) currency = random.choice(CURRENCIES) order_status = random.choice(ORDER_STATUSES) # Generate a long notes field (like the existing data) notes = str(uuid.uuid4()) * 10 return (customer_id, product_id, region, sales_channel, order_ts, amount, currency, order_status, notes) def main(): print(f"Connecting to PostgreSQL at {DB_HOST}:{DB_PORT}...") conn = psycopg2.connect( host=DB_HOST, port=DB_PORT, database=DB_NAME, user=DB_USER, password=DB_PASSWORD ) cursor = conn.cursor() print(f"Generating {TARGET_ROWS} sales orders...") print(f"Batch size: {BATCH_SIZE}") total_generated = 0 batch = [] for i in range(TARGET_ROWS): batch.append(generate_fake_order()) if len(batch) >= BATCH_SIZE: cursor.executemany( """ INSERT INTO sales_orders (customer_id, product_id, region, sales_channel, order_ts, amount, currency, order_status, notes) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) """, batch ) conn.commit() total_generated += len(batch) batch = [] if total_generated % 100000 == 0: print(f"Generated {total_generated} rows...") # Insert remaining rows if batch: cursor.executemany( """ INSERT INTO sales_orders (customer_id, product_id, region, sales_channel, order_ts, amount, currency, order_status, notes) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) """, batch ) conn.commit() total_generated += len(batch) cursor.close() conn.close() print(f"Completed! Generated {total_generated} sales orders.") if __name__ == "__main__": main()