По заданию я работаю с коллекцией баз данных postgreSQL, в которых участвует школьный округ. Я пытаюсь заполнить новое поле student_gpas, которое представляет собой массив, в котором хранятся уникальные GPA учащихся. Я сделал это на python с sqlalchemy со следующим кодом:
schools = db.session.query(School).filter(school.is_selected == true).all()
For sch in schools:
grades = db.session.query(Grade).filter(grade.school_id == sch.id).all()
For gr in grades:
classes = db.session.query(Class).filter(class.grade_id == grades.id).all()
For cl in classes:
students = db.session.query(Student).filter(student.class_id == cl.id).all()
For st in students:
If st.gpa not in gr.student_gpas:
gr.student_gpas.append(st.gpa)
Как бы это выглядело, если бы я хотел взять этот фрагмент кода и преобразовать его в один длинный и невероятно сложный оператор SQL






Чтобы увидеть, что сгенерировано, просто создайте движок с флагом echo = True.
Я взял с сайта sqlalchemy [1]:
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:', echo=True)
The echo flag is a shortcut to setting up SQLAlchemy logging, which is accomplished via Python’s standard logging module. With it enabled, we’ll see all the generated SQL produced.
[1] https://docs.sqlalchemy.org/en/latest/orm/tutorial.html#connecting
Это не будет невероятно сложным sql-запросом, это будет просто стандартный стандартный запрос, включающий 4 таблицы, объединения и предложение where, а также немного более сложную работу по объединению значений в список с разделителями. Пожалуйста, опубликуйте схему базы данных для этих и некоторых примеров данных.