РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
499 of 711 menu

Метод all_

Метод all_ класса ColumnElement создает выражение сравнения со всеми строками подзапроса. Он используется в правой части операторов сравнения (например, == или >) для проверки условия на соответствие всем значениям подзапроса.

Метод принимает первым параметром подзапрос или выражение select, которое возвращает одну колонку. Возвращается объект, представляющий конструкцию ALL (subquery).

Синтаксис

ColumnElement.all_(subquery)

Пример

Давайте создадим таблицу articles и проверим, что числовое поле num больше всех значений во вложенном запросе:

from sqlalchemy import create_engine, Column, Integer, String, select from sqlalchemy.orm import DeclarativeBase, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id = Column(Integer, primary_key=True) title = Column(String) text = Column(String) status = Column(String) num = Column(Integer) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add_all([ Article(title='article 1', num=10), Article(title='article 2', num=20), Article(title='article 3', num=30), ]) session.commit() subq = select(Article.num).where(Article.status == 'active') res = session.query(Article).filter(Article.num > Article.num.all_(subq)).all() for article in res: print(article.title)

Результат выполнения кода:

"article 3"

Пример

Давайте выведем сгенерированный SQL-запрос для метода all_:

from sqlalchemy import create_engine, Column, Integer, String, select from sqlalchemy.orm import DeclarativeBase class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id = Column(Integer, primary_key=True) title = Column(String) num = Column(Integer) engine = create_engine('sqlite:///:memory:') subq = select(Article.num).where(Article.num > 5) stmt = select(Article).where(Article.num == Article.num.all_(subq)) print(stmt)

Итоговый SQL запрос:

SELECT articles.id, articles.title, articles.num FROM articles WHERE articles.num = ALL (SELECT articles.num FROM articles WHERE articles.num > :num_1)

Смотрите также

  • класс ColumnElement,
    который представляет базовый элемент колонки
  • метод any_,
    который создает выражение ANY для подзапроса
  • метод in_,
    который проверяет вхождение в набор значений
  • метод op,
    который создает произвольный оператор сравнения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить