Files
Fulfillment-Backend/test/test.py
2024-05-19 04:08:10 +03:00

52 lines
1.4 KiB
Python

import asyncio
from sqlalchemy import select, func, union
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import joinedload
from backend.session import session_maker
from models import Deal, DealProduct, Service
import models
import models.secondary
async def main(session: AsyncSession):
deal_services_subquery = (
select(
models.secondary.DealService.deal_id,
func.sum(models.secondary.DealService.quantity * Service.price).label('total_price')
)
.join(Service)
.group_by(models.secondary.DealService.deal_id)
)
product_services_subquery = select(
select(
models.secondary.DealProductService.deal_id,
func.sum(models.DealProduct.quantity * models.secondary.DealProductService.price).label('total_price')
)
.join(models.secondary.DealProduct)
.group_by(models.secondary.DealProductService.deal_id)
.subquery()
)
union_subqueries = deal_services_subquery.union(product_services_subquery).subquery()
final_subquery = (
select(
union_subqueries.c.deal_id,
func.sum(union_subqueries.c.total_price).label('total_sum')
)
.group_by(union_subqueries.c.deal_id)
.subquery()
)
print(final_subquery)
async def preload():
async with session_maker() as session:
await main(session)
if __name__ == '__main__':
asyncio.run(preload())