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())
|