Перевод запросов sqlalchemy python в SQL

По заданию я работаю с коллекцией баз данных 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

Это не будет невероятно сложным sql-запросом, это будет просто стандартный стандартный запрос, включающий 4 таблицы, объединения и предложение where, а также немного более сложную работу по объединению значений в список с разделителями. Пожалуйста, опубликуйте схему базы данных для этих и некоторых примеров данных.

TomC 16.10.2018 02:45
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
105
1

Ответы 1

Чтобы увидеть, что сгенерировано, просто создайте движок с флагом 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

Другие вопросы по теме