/
BelgradeGambit
/
CLP
Обзор
Документация
Войти
/
BelgradeGambit
/
CLP
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
server/src/balancer.py
54 строки
2 KB
SaintTonka
GL
08 янв 2025, 20:21
08 янв 2025, 20:21
323a25c
Код
Авторство
О чём код?
from sqlalchemy.ext.asyncio import AsyncSession from src.internal.admin import balance_foo from sqlalchemy.sql import text async def balance_department(db: AsyncSession, department_id: int): # Получаем студентов из кафедры result_students = await db.execute( text(""" SELECT s.student_id, s.first_name, s.last_name FROM student s JOIN student_group sg ON s.student_id = sg.student_id JOIN "group" g ON sg.group_id = g.group_id WHERE g.department_id = :department_id """), {"department_id": department_id}, ) students = result_students.fetchall() # Получаем преподавателей из кафедры result_instructors = await db.execute( text(""" SELECT i.instructor_id, i.first_name, i.last_name FROM instructor i WHERE i.department_id = :department_id """), {"department_id": department_id}, ) instructors = result_instructors.fetchall() # Логика балансировки balance_result = balance_foo(students, instructors) # Применяем результаты балансировки for instructor, instructor_groups in zip(instructors, balance_result["instructor_groups"]): for group_id in instructor_groups: await db.execute( text(""" UPDATE "group" SET instructor_id = :instructor_id WHERE group_id = :group_id """), {"instructor_id": instructor["instructor_id"], "group_id": group_id}, ) for group_id, group_students in balance_result["group_students"].items(): for student_id in group_students: await db.execute( text(""" UPDATE student_group SET group_id = :group_id WHERE student_id = :student_id """), {"group_id": group_id, "student_id": student_id}, ) await db.commit()