api-python-tested/Controllers/Postgres/EnvTest/runner.py

87 lines
4.2 KiB
Python

from Controllers.Postgres.engine import get_db, Base
from Controllers.Postgres.schema import (
User,
Order,
Product,
Supplier,
ShippingAddress,
Category,
)
from sqlalchemy import func
import time
with get_db() as session:
start_time = time.time()
# Product table analysis
max_price = session.query(func.max(Product.price)).scalar()
min_price = session.query(func.min(Product.price)).scalar()
avg_price = session.query(func.avg(Product.price)).scalar()
print(f"product_prices Product Prices - Max: {max_price}, Min: {min_price}, Average: {avg_price}")
# Supplier table analysis
max_rating = session.query(func.max(Supplier.rating)).scalar()
min_rating = session.query(func.min(Supplier.rating)).scalar()
avg_rating = session.query(func.avg(Supplier.rating)).scalar()
print(f"supplier_ratings Supplier Ratings - Max: {max_rating}, Min: {min_rating}, Average: {avg_rating}")
# User table analysis
max_balance = session.query(func.max(User.account_balance)).scalar()
min_balance = session.query(func.min(User.account_balance)).scalar()
avg_balance = session.query(func.avg(User.account_balance)).scalar()
print(f"user_balances User Balances - Max: {max_balance}, Min: {min_balance}, Average: {avg_balance}")
# Order table analysis
max_order_amount = session.query(func.max(Order.order_date)).scalar()
min_order_amount = session.query(func.min(Order.total_amount)).scalar()
avg_order_amount = session.query(func.avg(Order.total_amount)).scalar()
print(f"order_amounts Order Amounts - Max: {max_order_amount}, Min: {min_order_amount}, Average: {avg_order_amount}")
# Example complex joins
# Join User with Preferred Category and Last Ordered Product
user_category_product = session.query(User.username, Category.name.label('preferred_category'), Product.name.label('last_product')) \
.join(Category, User.preferred_category_id == Category.id) \
.join(Product, User.last_ordered_product_id == Product.id) \
.all()
print("\nUsers, their Preferred Category, and Last Ordered Product:")
for user, category, product in user_category_product[0:5]:
print(f"user_category_product User: {user}, Preferred Category: {category}, Last Product: {product}")
# Join User with Orders and Shipping Address
user_orders_shipping = session.query(User.username, Order.total_amount, ShippingAddress.city) \
.join(Order, User.id == Order.user_id) \
.join(ShippingAddress, Order.shipping_address_id == ShippingAddress.id) \
.all()
print("\n Users, their Order Amounts, and Shipping City:")
for user, amount, city in user_orders_shipping[0:5]:
print(f"user_orders_shipping User: {user}, Order Amount: {amount}, Shipping City: {city}")
# Join User with Preferred Category and Supplier Rating
user_category_supplier = session.query(User.username, Category.name.label('preferred_category'), Supplier.rating.label('supplier_rating')) \
.join(Category, User.preferred_category_id == Category.id) \
.join(Supplier, User.supplier_rating_id == Supplier.id) \
.all()
print("\nUsers, their Preferred Category, and Supplier Rating:")
for user, category, rating in user_category_supplier[0:5]:
print(f"user_category_supplier User: {user}, Preferred Category: {category}, Supplier Rating: {rating}")
left_join_result = session.query(User.username, Category.name.label('preferred_category')) \
.outerjoin(Category, User.preferred_category_id == Category.id) \
.all()
print("\nLeft Outer Join (All Users and their Preferred Categories):")
for user, category in left_join_result[0:5]:
print(f"left_join_result User: {user}, Preferred Category: {category}")
right_join_result = session.query(User.username, Category.name.label('preferred_category')) \
.outerjoin(User, Category.id == User.preferred_category_id) \
.all()
print("\nRight Outer Join (All Categories and the Users who Prefer Them):")
for user, category in right_join_result[0:5]:
print(f"right_join_result Category: {category}, User: {user}")
end_time = time.time()
print(f"Total time taken: {end_time - start_time} seconds")