Manual SQL/Faker Seeder (200+ lines)
Fragile ordering, retries, null edge cases, FK mismatches
# seed_manual.py (excerpt from a 200+ line script)
import random
from faker import Faker
from sqlalchemy import text
fake = Faker("en_US")
def seed_users(conn, count):
user_ids = []
for _ in range(count):
row = conn.execute(
text("""
INSERT INTO users (id, name, email, created_at)
VALUES (gen_random_uuid(), :name, :email, NOW())
RETURNING id
"""),
{"name": fake.name(), "email": fake.unique.email()},
).fetchone()
user_ids.append(str(row[0]))
return user_ids
def seed_orders(conn, user_ids, count):
order_ids = []
for _ in range(count):
uid = random.choice(user_ids) if user_ids else None
if uid is None:
# often missed edge case in pipelines
raise RuntimeError("No users available for orders.user_id FK")
row = conn.execute(
text("""
INSERT INTO orders (id, user_id, status, total_cents, created_at)
VALUES (gen_random_uuid(), :user_id, :status, :total, NOW())
RETURNING id
"""),
{
"user_id": uid,
"status": random.choice(["pending", "paid", "refunded"]),
"total": random.randint(1000, 200000),
},
).fetchone()
order_ids.append(str(row[0]))
return order_ids
# ... 130+ more lines:
# - seed_order_items needs orders pre-seeded
# - seed_refunds depends on paid orders only
# - ad-hoc retry loops for FK violations
# - custom cleanup and transaction guards
# - flaky CI due to order-of-operations drift