88 lines
2.9 KiB
Python
88 lines
2.9 KiB
Python
import random
|
|
from faker import Faker
|
|
from faker_commerce import Provider
|
|
|
|
from Controllers.Postgres.engine import get_db, engine, Base
|
|
from Controllers.Postgres.schema import (
|
|
User,
|
|
Order,
|
|
Product,
|
|
Supplier,
|
|
ShippingAddress,
|
|
Category,
|
|
)
|
|
|
|
fake = Faker('en_US')
|
|
fake.add_provider(Provider)
|
|
|
|
num_rows = 1000
|
|
|
|
# Base.metadata.create_all(engine)
|
|
|
|
def commit_session_or_rollback(session, list_of_appends):
|
|
try:
|
|
session.add_all(list_of_appends)
|
|
session.commit()
|
|
except Exception as err:
|
|
print('Alchemy', str(err)[:113])
|
|
session.rollback()
|
|
raise
|
|
|
|
with get_db() as session:
|
|
# Generate and add unique Products
|
|
products = []
|
|
for _ in range(num_rows):
|
|
products.append(Product(name=fake.unique.ecommerce_name() + str(_), price=round(random.uniform(10, 2000), 2)))
|
|
commit_session_or_rollback(session, products)
|
|
product_ids = [p.id for p in session.query(Product).all()]
|
|
|
|
# Generate and add unique Categories
|
|
categories = []
|
|
for _ in range(num_rows):
|
|
categories.append(Category(name=fake.unique.domain_name() + str(_)))
|
|
|
|
commit_session_or_rollback(session, categories)
|
|
category_ids = [c.id for c in session.query(Category).all()]
|
|
|
|
# Generate and add unique Suppliers
|
|
suppliers = []
|
|
for _ in range(num_rows):
|
|
suppliers.append(Supplier(name=fake.unique.free_email() + str(_), rating=round(random.uniform(2.5, 5.0), 1)))
|
|
commit_session_or_rollback(session, suppliers)
|
|
supplier_ids = [s.id for s in session.query(Supplier).all()]
|
|
|
|
# Generate and add unique Shipping Addresses
|
|
shipping_addresses = []
|
|
for _ in range(num_rows):
|
|
shipping_addresses.append(ShippingAddress(
|
|
address_line_1=fake.unique.address(),
|
|
city=fake.unique.city(),
|
|
zip_code=fake.unique.zipcode()
|
|
))
|
|
commit_session_or_rollback(session, shipping_addresses)
|
|
shipping_address_ids = [sa.id for sa in session.query(ShippingAddress).all()]
|
|
|
|
# Generate and add unique Users
|
|
users = []
|
|
for _ in range(num_rows):
|
|
users.append(User(
|
|
username=fake.unique.user_name() + str(_),
|
|
account_balance=round(random.uniform(0, 5000), 2),
|
|
preferred_category_id=random.choice(category_ids),
|
|
last_ordered_product_id=random.choice(product_ids),
|
|
supplier_rating_id=random.choice(supplier_ids)
|
|
))
|
|
commit_session_or_rollback(session, users)
|
|
user_ids = [u.id for u in session.query(User).all()]
|
|
|
|
# Generate and add unique Orders
|
|
orders = []
|
|
for _ in range(num_rows):
|
|
orders.append(Order(
|
|
order_date=fake.unique.date(),
|
|
total_amount=round(random.uniform(10, 3000), 2),
|
|
user_id=random.choice(user_ids),
|
|
shipping_address_id=random.choice(shipping_address_ids)
|
|
))
|
|
commit_session_or_rollback(session, orders)
|