59 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import asyncio
 | 
						|
 | 
						|
import openpyxl
 | 
						|
from openpyxl.worksheet.worksheet import Worksheet
 | 
						|
from sqlalchemy.ext.asyncio import AsyncSession
 | 
						|
 | 
						|
from backend.session import session_maker
 | 
						|
from models import ServiceCategory, Service
 | 
						|
 | 
						|
 | 
						|
async def write_services(services: dict):
 | 
						|
    async with session_maker() as session:
 | 
						|
        session: AsyncSession
 | 
						|
 | 
						|
        for raw_category in services.keys():
 | 
						|
            category = ServiceCategory(name=raw_category)
 | 
						|
            session.add(category)
 | 
						|
            await session.flush()
 | 
						|
            print(category.id)
 | 
						|
            for raw_service in services[raw_category]:
 | 
						|
                service = Service(name=raw_service['name'],
 | 
						|
                                  price=raw_service['price'],
 | 
						|
                                  category_id=category.id)
 | 
						|
                session.add(service)
 | 
						|
                await session.flush()
 | 
						|
        await session.commit()
 | 
						|
 | 
						|
 | 
						|
async def main():
 | 
						|
    workbook = openpyxl.load_workbook('services.xlsx')
 | 
						|
    sheet: Worksheet = workbook.active
 | 
						|
    START_ROW = 12
 | 
						|
    current_category = None
 | 
						|
    services = {}
 | 
						|
    merged_cells = sheet.merged_cells.ranges
 | 
						|
    for row in range(START_ROW, sheet.max_row):
 | 
						|
        first_column = sheet.cell(row, 1)
 | 
						|
        first_column_value = first_column.value.strip()
 | 
						|
 | 
						|
        second_column = sheet.cell(row, 2)
 | 
						|
        second_column_value = second_column.value
 | 
						|
 | 
						|
        is_category = any([second_column.coordinate in merged_cell for merged_cell in merged_cells])
 | 
						|
        if is_category:
 | 
						|
            current_category = first_column_value
 | 
						|
            services[current_category] = []
 | 
						|
            continue
 | 
						|
        price = second_column_value
 | 
						|
        name = first_column_value
 | 
						|
        services[current_category].append({
 | 
						|
            'name': name,
 | 
						|
            'price': price
 | 
						|
        })
 | 
						|
    await write_services(services)
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    asyncio.run(main())
 |